catimpossibile 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 awkper assicurarti che (questo modifica i file vuoti):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
Il ENDFILEblocco 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 catcome 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 1fine 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 -stest 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 \nnelle chiamate printfsopra (funzionerà anche nel awkcodice).