cat
no puede generar datos que no existan en los archivos. Si un archivo está vacío, ni siquiera tiene un carácter de nueva línea para proporcionar una línea vacía como salida.
Puede asegurarse de que los archivos contengan al menos un solo carácter de nueva línea.
Así es como usa GNU awk
para asegurarse de que (esto modifica los archivos vacíos):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
El ENDFILE
bloque se ejecutará después de terminar de leer cualquiera de los archivos. Si FNR
es cero, nunca vimos ninguna línea en el archivo, por lo que insertamos una nueva línea en él. El script continúa con el siguiente archivo.
Luego puede usar cat
como lo hizo en la pregunta.
Alternativamente, sin cambiar los archivos, usando GNU en awk
lugar de cat
:
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
Esto hace el mismo tipo de detección de archivos vacíos que el anterior, pero imprime la nueva línea en la salida estándar en lugar de en el archivo. Al 1
final podría reemplazarse { print }
y provocará que se generen todos los datos en los archivos no vacíos.
Alternativamente, un bucle de shell (debería funcionar en cualquier shell POSIX):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
La -s
prueba será verdadera si el archivo existe y tiene un tamaño mayor que cero.
Si desea que la cadena literal [Blank]
se genere para archivos vacíos, simplemente inserte esa cadena delante de \n
las llamadas printf
anteriores (esto también funcionará en el awk
código).