cat
dosyalarda 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 awk
sağ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
ENDFILE
Blok dosyalarının herhangi okuduktan bittikten sonra çalıştırılacaktır. Eğer FNR
sı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 cat
soruda 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. 1
Sonunda 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
-s
Dosyanı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 \n
için çağrılarda printf
yukarıdaki (bu olacak da iş awk
kodu).