Linux: кішка з роздільниками серед файлів


28

У Linux, якщо ви введете cat *, ви отримаєте щось подібне:

line1 з file1
line2 з file1
line1 з file2
line1 з file3
line2 з file3
line3 з file3

Мені хотілося б відобразити роздільник серед файлів. Щось так:
line1 з file1
line2 з file1
XXXXXXXXXXXX
line1 з file2
XXXXXXXXXXXX
line1 з file3
line2 з file3
line3 з file3

Чи легко це зробити однолінійним набором напам’ять?

Відповіді:


40

Якщо ви не надто метушливі щодо появи сепаратора:

tail -n +1 *

Це чудово! Я здивований, чим ваша команда відрізняється від хвоста -n 1 *. Я не можу знайти жодної згадки про ефект +1 (що перевищує 1) на сторінці людини.
Даніеле

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

Ах, тепер я це бачу на сторінці man. Я це не помітив. Чудово, дякую купу
Даніеле

Подібні рішення є в цій статті: everythingsysadmin.com/2012/09/unor
pravosunix.html

Вибачте за поганий коментар, але це приголомшливо. Дякую, @Gilles
Mike D


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.