cat
ไม่สามารถส่งออกข้อมูลที่ไม่มีอยู่ในไฟล์ หากไฟล์ว่างเปล่ามันจะไม่มีอักขระขึ้นบรรทัดใหม่เพื่อให้บรรทัดว่างเป็นเอาต์พุต
คุณสามารถตรวจสอบให้แน่ใจว่าไฟล์มีอักขระขึ้นบรรทัดใหม่อย่างน้อยหนึ่งตัว
นี่คือวิธีที่คุณใช้ GNU awk
เพื่อให้แน่ใจว่า (นี่เป็นการแก้ไขไฟล์เปล่า):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
ENDFILE
บล็อกจะดำเนินการหลังจากจบการอ่านไฟล์ใด ๆ ถ้าFNR
เป็นศูนย์เราไม่เคยเห็นบรรทัดใด ๆ ในไฟล์ดังนั้นเราจึงแทรกบรรทัดใหม่ขึ้นมาหนึ่งบรรทัด สคริปต์จะดำเนินการต่อกับไฟล์ถัดไป
จากนั้นคุณสามารถใช้cat
เช่นเดียวกับที่คุณทำในคำถาม
อีกทางหนึ่งโดยไม่เปลี่ยนไฟล์โดยใช้ GNU awk
แทน cat
:
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
นี่เป็นการตรวจจับไฟล์เปล่าแบบเดียวกันกับที่กล่าวมา แต่จะพิมพ์บรรทัดใหม่ไปยังเอาต์พุตมาตรฐานแทนที่จะเป็นไฟล์ 1
ในตอนท้ายจะถูกแทนที่ด้วย{ print }
และจะทำให้ข้อมูลทั้งหมดในไฟล์ที่ไม่ว่างเปล่าที่จะออกมา
อีกทางหนึ่งคือ shell loop (ควรทำงานกับ POSIX เชลล์):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
การ-s
ทดสอบจะเป็นจริงหากไฟล์นั้นมีอยู่และมีขนาดใหญ่กว่าศูนย์
หากคุณต้องการ[Blank]
ให้เอาท์พุทสตริงตัวอักษรสำหรับไฟล์ว่างเปล่าเพียงแค่แทรกสตริงนั้นไว้ข้างหน้า\n
ในการเรียกไปที่printf
ด้านบน (สิ่งนี้จะทำงานในawk
รหัสด้วย)