bashスクリプトを使用してcsvファイルの先頭に2つの新しい列を追加して、ファイル名の最初の4文字が最初の列の値であり、次の2文字が2番目の列の値になるようにしたいと思います。列。たとえば、私の.csvファイル名が「exam_20」の場合、「exam」のすべてのエントリを含む新しい最初の列と「20」のすべてのエントリを含む新しい2番目の列が必要です。 Bashでこれを達成する方法を知っている人はいますか?よろしくお願いします。
ベストアンサー1
そしてawk
:
#!/usr/bin/awk -f
BEGIN { OFS="," };
FNR==1 {
split(FILENAME,c,/[_.]/);
};
{ print c[1], c[2], $0 }
または、コマンドラインから1行のコードで実行するか、シェルスクリプトに含まれて実行します。
awk -v OFS=',' 'FNR==1 {split(FILENAME,c,/[_.]/)}; {print c[1],c[2],$0}' *.csv
c
各入力ファイルに対して、文字クラスを[_.]
フィールド区切り文字として使用して、各FILENAMEを配列に分割します。配列のフィールド 1 と 2 は、c
ファイルの各行の前に追加されます。
出力例:
$ ./zsha.awk exam_20.csv
exam,20,1,2,3,4
exam,20,5,6,7,8
exam,20,9,10,11,12
例で使用されている入力データは次のとおりです。
$ cat exam_20.csv
1,2,3,4
5,6,7,8
9,10,11,12