cat
nã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 awk
para garantir que (isso modifique os arquivos vazios):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
O ENDFILE
bloco será executado depois de terminar de ler qualquer um dos arquivos. Se FNR
for 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 cat
como 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 1
final 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 -s
teste 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 \n
nas chamadas printf
acima (isso também funcionará no awk
código).