Linux:ファイル間にセパレーターがあるcat


28

Linuxでcat *と入力すると、次のようなメッセージが表示されます。

file1
から
line1 file1 から line2 file1からline1 file2
からline1 file3
から
line2 file3 からline2 file3 からline3

私が望むのは、ファイル間のセパレーターを表示することです。次のようなもの:
file1
からの line1 file1 からの line2 file1からの
XXXXXXXXXXXX
line1 file2からの
XXXXXXXXXXXX
line1 file3
から
line2 file3 からline3 file3から

これは、簡単に入力できるワンライナーで簡単に実現できますか?

回答:


40

セパレーターの外観にあまりこだわりがない場合:

tail -n +1 *

これは素晴らしい!あなたのコマンドがtail -n 1 *とどのように違うか、私は驚いています。manページに+1(1よりも小さい)の効果についての言及も見つかりません。
ダニエル

1
tail -n X最後のX行を表示します。tail -n +X1から始まる行Xで始まります。つまり、最初の(X-1)行を除くすべてを表示します。
ジル 'SO-悪であるのをやめる'

ああ、今私はそれをマニュアルページで見ることができます。見落としました。素晴らしい、ありがとう
ダニエル

同様のソリューションがこの記事にあります:everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime 14年

悪いコメントで申し訳ありませんが、これは素晴らしいです。ありがとう、@ Gilles
マイク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}' *

この回答の他の例にあるようなセパレータを使用できます。各ファイルの末尾に区切り文字が必要な場合は、に変更BEGINFILEENDFILEます。(実行順序を暗示するのではなく)条件付きであるため、スクリプトの先頭に表示することができます。


2
+1 for awk!私は...それは何を行うことができます誓う
ブラッド・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.