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

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

строка1 из файла1
строка2 из файла1
строка1 из файла2
строка1 из файла3
строка2 из файла3
строка3 из файла3

То, что я хотел бы, чтобы отобразить разделитель между файлами. Что-то вроде этого:
строка1 из файла1
строка2 из файла1
XXXXXXXXXXXX
строка1 из файла2
XXXXXXXXXXXX
строка1 из файла3
строка2 из файла3
строка3 из файла3

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

3 ответа

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

tail -n +1 *

cd /to/your/directory; for each in *; do cat $each; echo "XXXXXXXXXXX"; done

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, Он по-прежнему может появляться в начале скрипта, поскольку он условный (а не подразумевает порядок выполнения).

Другие вопросы по тегам