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