catkhông thể xuất dữ liệu không tồn tại trong các tập tin. Nếu một tệp trống, nó thậm chí không có ký tự dòng mới để cung cấp một dòng trống làm đầu ra.
Bạn có thể đảm bảo rằng các tệp chứa ít nhất một ký tự dòng mới.
Đây là cách bạn sử dụng GNU awkđể đảm bảo rằng (điều này sửa đổi các tệp trống):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
Các ENDFILEkhối sẽ được thực hiện sau khi kết thúc đọc bất kỳ của các tập tin. Nếu FNRbằng 0, chúng tôi không bao giờ thấy bất kỳ dòng nào trong tệp, vì vậy chúng tôi chèn một dòng mới vào nó. Kịch bản sau đó tiếp tục với tập tin tiếp theo.
Sau đó bạn có thể sử dụng catnhư bạn đã làm trong câu hỏi.
Ngoài ra, không thay đổi các tệp, sử dụng GNU awk thay vì cat :
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
Điều này thực hiện cùng loại phát hiện các tệp trống như trên, nhưng in dòng mới thành đầu ra tiêu chuẩn chứ không phải cho tệp. Các 1cuối cùng có thể được thay thế bằng { print }và sẽ gây ra tất cả dữ liệu trong các tập tin không bị trống để được outputted.
Ngoài ra, một vòng lặp shell (nên hoạt động trong bất kỳ shell POSIX nào):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
Các -sthử nghiệm sẽ được true nếu tập tin tồn tại và có một lớn hơn kích thước hơn không.
Nếu bạn muốn chuỗi ký tự [Blank]được xuất ra cho các tệp trống, chỉ cần chèn chuỗi đó ở phía trước \ntrong các lệnh gọi printfở trên (điều này cũng sẽ hoạt động trong awkmã).