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 }і призведе до виведення всіх даних у непорожніх файлах.
Крім того, цикл оболонки (повинен працювати в будь-якій оболонці 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коді).