cat
tidak dapat menampilkan data yang tidak ada dalam file. Jika file kosong, itu bahkan tidak memiliki karakter baris baru untuk memberikan baris kosong sebagai output.
Anda dapat memastikan bahwa file berisi setidaknya satu karakter baris baru.
Ini adalah bagaimana Anda menggunakan GNU awk
untuk memastikan bahwa (ini memodifikasi file kosong):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
The ENDFILE
blok akan dieksekusi setelah menyelesaikan membaca salah satu file. Jika FNR
nol, kami tidak pernah melihat baris apa pun di file, jadi kami memasukkan satu baris baru ke dalamnya. Script kemudian dilanjutkan dengan file selanjutnya.
Anda kemudian dapat menggunakan cat
seperti yang Anda lakukan dalam pertanyaan.
Atau, tanpa mengubah file, gunakan GNU awk
alih-alih cat
:
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
Ini melakukan pendeteksian file kosong yang sama seperti di atas, tetapi mencetak baris baru ke output standar daripada ke file. Pada 1
akhirnya dapat diganti oleh { print }
dan akan menyebabkan semua data dalam file yang tidak kosong akan dihasilkan.
Sebagai alternatif, sebuah loop shell (harus bekerja di shell POSIX):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
The -s
tes akan benar jika file ada dan memiliki lebih besar ukuran dari nol.
Jika Anda ingin string literal [Blank]
dihasilkan untuk file kosong, cukup masukkan string itu di depan \n
dalam panggilan ke printf
atas (ini juga akan berfungsi dalam awk
kode).