У меня есть список файлов .txt, ниже:
-rw-rw-r-- 1 root dev 11 May 16 12:18 20_SumActive.txt
-rw-rw-r-- 1 root dev 11 May 16 12:18 22_SumActive.txt
-rw-rw-r-- 1 root dev 7 May 16 12:18 24_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 26_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 28_SumActive.txt
Выход:
kpgmeddev01> cat 2[0-8]_SumActive.txt
Sum: 47760
Sum: 72000
Sum: 0
Как получить вывод, как показано ниже:
Sum: 47760
Sum: 72000
Sum: 0
[Blank]
[Blank]
Нужно руководство.
command-line
solaris
Fewong
источник
источник
[Blank]
, вы имели в виду эти 7 символов или намеревались указать пустую строку?Ответы:
cat
не может вывести данные, которых нет в файлах. Если файл пуст, у него даже нет символа новой строки для предоставления пустой строки в качестве вывода.Вы можете убедиться, что файлы содержат хотя бы один символ новой строки.
Вот как вы используете GNU
awk
для обеспечения этого (это изменяет пустые файлы):ENDFILE
Блок будет выполнен после окончания считывания любого из файлов. ЕслиFNR
ноль, мы никогда не видели никаких строк в файле, поэтому мы вставляем в него одну новую строку. Затем сценарий продолжается со следующего файла.Затем вы можете использовать,
cat
как вы сделали в вопросе.В качестве альтернативы, без изменения файлов, используя GNU
awk
вместоcat
:Это делает то же самое обнаружение пустых файлов, что и выше, но печатает новую строку в стандартный вывод, а не в файл. Значение
1
в конце может быть заменено на{ print }
и приведет к выводу всех данных в непустых файлах.Альтернативно, цикл оболочки (должен работать в любой оболочке POSIX):
-s
Тест будет истиной , если файл существует и имеет больший размер , чем ноль.Если вы хотите, чтобы буквальная строка
[Blank]
выводилась для пустых файлов, просто вставьте эту строку перед\n
вызовамиprintf
выше (это также будет работать вawk
коде).источник
С
perl
Который добавляет символ новой строки, если отсутствует в конце, поэтому выдает пустую строку для пустых файлов, но также добавляет новую строку для непустых файлов, которые пропускают (и в конечном итоге будет объединен в одну строку с
cat
).источник
(Это не совсем то, что вы спрашиваете, но :) В таких ситуациях я предпочитаю использовать
head
Обычно это то, что вы хотите. Если нет, то это легко
sed
потомисточник
С
xargs
иgrep
вы можете попробовать что-то вроде:источник
Предполагая, что под
[Blank]
вами подразумеваются буквальные пустые строки, это должно сработать:источник
Вы можете проверить каждый файл, чтобы увидеть, имеет ли он нулевую длину, прежде чем пытаться отобразить его содержимое:
Я использовал
awk 1 "$f"
вместо того,cat "$f"
потому чтоawk
гарантирует завершение вывода файла с новой строки.В вашем вопросе, если вы предполагали, что это
[blank]
должен быть не буквальный, а просто пустая строка, вы можете реализовать это, используя приведенный выше код и удалив'[Blank]'
из концаecho
оператора.источник
Я предполагаю, что ваши файлы 26_SumActive.txt и 28_SumActive.txt пусты и вам нужны пустые строки при отображении их содержимого
Для этого вы можете просто просмотреть список файлов и просмотреть их содержимое, а если файл пуст, вывести пустую строку.
[ -s FILE ]
Истинно, если ФАЙЛ существует и имеет размер больше нуля.источник
if [ -s $i ]; then cat $i; else echo -e ""; fi;
. Еще +1 для простого теста, использующего только стандартную функциональность оболочки.cat "$i"; test -s "$i" || echo
- не нужно для этого громоздкихif
или непереносимыхecho
флагов.где - позволит кошке читать со стандартного ввода.
Итак, после отображения содержимого ваших файлов кошка будет ждать вашего ввода. Вы можете сделать желаемый ввод, нажав ввод для буквенных пробелов или [Пробел], если это то, что вы хотите. После каждого ввода нажмите ввод, как только все данные введены, нажмите ^ D (Ctrl + D) и все готово.
PS: для каждого входа вы получите соответствующий вывод.
При этом вы можете поместить пробелы или что-то еще, что вы хотите, между двумя последовательностями выходов.
источник
cat
в качестве решения и позволить оператору, что они хотят.