複数のテキストファイルがあり、各ファイルの内容は次のとおりです。
attribute1,attribute2,...
1,2,...
列名を記述する最初の行は、すべてのファイルで同じです。
ファイルの2番目の行をリンクし、元のファイルの各行のファイル名を含む新しい列を追加し、最初の行の1つを新しいファイルの最初の行にしたいと思います。たとえば、必要な新しいファイルは次のとおりです。
file,attribute1,attribute2,...
file1,1,2,...
file2,11,12,...
file3,21,22,...
どうすればいいですか?
答え1
ファイル名を追加するには、次のようにしますawk
。
awk -v OFS=, 'NR==1{print "file", $0};FNR==2{print FILENAME, $0}' file1 file2 ... fileN >outfile
入力の最初の行()の場合は更新されたヘッダーをNR==1
印刷し、||
各ファイルの2行目()の場合は更新されFNR==2
たヘッダー()FILENAME
と行($0
)を印刷します。
編集する前の最初の答えです。
あなたはこれを行うことができますsed
:
sed -n '1p;n;p' file1 file2 ... fileN >outfile
-n
印刷を抑制し、1p
最初の行を印刷してから、各行(奇数行)ごとにパターンスペースを消去し、拡張行(つまりn
偶数行)を読み取ってp
印刷します。
答え2
{ printf file,; head -n1 <file
grep -n '' ./file* /dev/null|
sed -ne'/^[^:]*:2:/s/:.:/,/p'
} >./new_file
grep
各行の先頭にファイル名が表示され、行番号で選択するのにも役立ちますn
。ただし、ファイル名にコロンが含まれていると正しく機能しない可能性があります。
答え3
そしてtail
cat file1.txt && tail -q -n +2 file2.txt file3.txt ..