catnão pode gerar dados que não existem nos arquivos. Se um arquivo estiver vazio, ele nem terá um caractere de nova linha para fornecer uma linha vazia como saída.
Você pode garantir que os arquivos contenham pelo menos um único caractere de nova linha.
É assim que você usa o GNU awkpara garantir que (isso modifique os arquivos vazios):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
O ENDFILEbloco será executado depois de terminar de ler qualquer um dos arquivos. Se FNRfor zero, nunca vimos nenhuma linha no arquivo, então inserimos uma única nova linha nele. O script continua com o próximo arquivo.
Você pode usar catcomo fez na pergunta.
Como alternativa, sem alterar os arquivos, use o GNU em awk vez de cat :
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
Isso faz o mesmo tipo de detecção de arquivos vazios como acima, mas imprime a nova linha na saída padrão e não no arquivo. O 1final pode ser substituído por { print }e fará com que todos os dados nos arquivos não vazios sejam gerados.
Como alternativa, um loop de shell (deve funcionar em qualquer shell POSIX):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
O -steste será verdadeiro se o arquivo existir e tiver um tamanho maior que zero.
Se você deseja que a string literal [Blank]seja gerada para arquivos vazios, basta inserir essa string na frente \nnas chamadas printfacima (isso também funcionará no awkcódigo).