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
коді).