Linux: кошка с разделителями между файлами


28

В Linux, если вы введете cat *, вы получите что-то вроде этого:

line1 из file1
line2 из file1
LINE1 из file2
LINE1 из file3
line2 из file3
Line3 из file3

То, что я хотел бы, чтобы отобразить разделитель между файлами. Что - то вроде этого:
line1 из file1
line2 из file1
XXXXXXXXXXXX
LINE1 из file2
ХХХХХХХХХХХХ
line1 из file3
line2 из file3
Line3 из file3

Это легко сделать с помощью однострочника, который легко набирать наизусть?

Ответы:


40

Если вы не слишком суетливы по поводу внешнего вида разделителя:

tail -n +1 *

Это здорово! Я удивлен, как ваша команда отличается от tail -n 1 *. Я также не могу найти упоминания об эффекте +1 (больше, чем 1) на странице руководства.
Даниэль

1
tail -n Xпоказывает последние X строк. tail -n +Xначинается со строки X, начинающейся с 1 , то есть показывает все, кроме первых (X-1) строк.
Жиль "ТАК - перестань быть злым"

Ах, теперь я вижу это на странице руководства. Я упустил это. Отлично, спасибо большое
Daniele

Подобные решения в этой статье: everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime

Извините за плохой комментарий, но это потрясающе. Спасибо, @Gilles
Майк Д


11
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

Или

awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' *

Или

awk 'FNR==1 {print "XXXXXX File no. " ++count, "XXXXXX"}{print}' *

Использование только Bash (нет cat):

for file in *; do printf "$(<"$file")\nXXXXXXXXXXXX\n"; done

Редактировать:

В AWK 4:

awk 'BEGINFILE {print "XXXXXXXXXXXX"}{print}' *

Вы можете использовать любой разделитель, такой как в других примерах в этом ответе. Если вы хотите разделитель в конце каждого файла, измените BEGINFILEна ENDFILE. Он по-прежнему может появляться в начале скрипта, поскольку он условный (а не подразумевает порядок выполнения).


2
+1 за awk! Клянусь, он может делать все, что угодно ...
Брэд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.