catdosyalarda bulunmayan veriler çıktı alınamıyor. Bir dosya boşsa, çıktı olarak boş bir satır sağlayacak yeni satır karakteri bile yoktur.
Dosyaların en az bir satırsonu karakteri içerdiğinden emin olabilirsiniz.
Aşağıdakileri awksağlamak için GNU'yu şu şekilde kullanırsınız (bu, boş dosyaları değiştirir):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
ENDFILEBlok dosyalarının herhangi okuduktan bittikten sonra çalıştırılacaktır. Eğer FNRsıfır olan Bu araca tek yeni satır eklemek, böylece biz, dosyada herhangi satırları görmedim. Daha sonra komut dosyası bir sonraki dosyayla devam eder.
Daha sonra catsoruda yaptığınız gibi kullanabilirsiniz .
Alternatif olarak, dosyaları değiştirmeden aşağıdakiler awk yerine GNU kullanıncat :
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
Bu, yukarıdaki gibi aynı boş dosya algılamasını yapar, ancak yeni satırı dosya yerine standart çıktıya yazdırır. 1Sonunda yerini olabilir { print }ve boş olmayan dosyalarda tüm verinin çıkışı neden olacaktır.
Alternatif olarak, bir kabuk döngüsü (herhangi bir POSIX kabuğunda çalışmalıdır):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
-sDosyanın var ve sıfırdan büyük bir boyuta sahipse testi geçerli olacak.
Eğer değişmez dize istiyorsanız [Blank]boş dosyalar için çıkış yapılacak olan, basitçe önünde o dizeyi eklemek \niçin çağrılarda printfyukarıdaki (bu olacak da iş awkkodu).