cat
khô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 ENDFILE
khố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 FNR
bằ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 cat
như 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 1
cuố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 -s
thử 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 \n
trong các lệnh gọi printf
ở trên (điều này cũng sẽ hoạt động trong awk
mã).