catno 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 awkpara asegurarse de que (esto modifica los archivos vacíos):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
El ENDFILEbloque se ejecutará después de terminar de leer cualquiera de los archivos. Si FNRes 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 catcomo 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 1final 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 -sprueba 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 \nlas llamadas printfanteriores (esto también funcionará en el awkcódigo).