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