web-dev-qa-db-ja.com

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

Linuxでは、cat *と入力すると、次のようになります。

file1のline1
ファイル1の行2
ファイル1の行1
ファイル3の行1
ファイル2の行2
file3のline3

ファイルの区切りを表示したいのですが。このようなもの:
file1のline1
ファイル1の行2
XXXXXXXXXXXX
ファイル1の行1
XXXXXXXXXXXX
ファイル3の行1
ファイル2の行2
file3のline3

ワンライナーで簡単にタイプできますか?

30
Daniele

セパレーターの外観についてあまり面倒ではない場合:

tail -n +1 *

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

17
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に変更します。これは、(実行順序を意味するのではなく)条件付きであるため、スクリプトの最初に表示されます。