cat
impossibile generare dati che non esistono nei file. Se un file è vuoto, non ha nemmeno un carattere di nuova riga per fornire una riga vuota come output.
Puoi assicurarti che i file contengano almeno un singolo carattere di nuova riga.
Questo è il modo in cui usi GNU awk
per assicurarti che (questo modifica i file vuoti):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
Il ENDFILE
blocco verrà eseguito al termine della lettura di uno qualsiasi dei file. Se FNR
è zero, non abbiamo mai visto alcuna riga nel file, quindi inseriamo una sola nuova riga in esso. Lo script continua quindi con il file successivo.
È quindi possibile utilizzare cat
come nella domanda.
In alternativa, senza modificare i file, utilizzare GNU awk
invece di cat
:
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
Questo fa lo stesso tipo di rilevamento di file vuoti come sopra, ma stampa la nuova riga sull'output standard anziché sul file. Alla 1
fine potrebbe essere sostituito { print }
e causerà la trasmissione di tutti i dati nei file non vuoti.
In alternativa, un loop di shell (dovrebbe funzionare in qualsiasi shell POSIX):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
Il -s
test sarà vero se il file esiste e ha una dimensione maggiore di zero.
Se si desidera che la stringa letterale [Blank]
venga emessa per file vuoti, è sufficiente inserire quella stringa davanti \n
nelle chiamate printf
sopra (funzionerà anche nel awk
codice).