AWKを使用したファイルのマージ

AWKを使用したファイルのマージ

タブで区切られた179のテキストファイルを含むフォルダがあります。すべて同じ形式を持ちます。以下はサンプルデータへのリンクです。

http://www.mvabl.com/public/sample_data.txt

(この例には、私が望む5つのヘッダー、5つのデータ行、そして私が行ったすべての後続データがあります。いいえ思う。 )

最初の4つのヘッダー行を完全に削除してから、5行目を末尾のデータを除いて、結合データの単一ファイル内のすべての行のヘッダーとして使用したいと思います。

また、ファイル名フィールドとPrelim 4の値の2つのフィールドを追加したいと思います。したがって、出力は次のようになります。

Filename    Curr    Storefront Name Identifier  M-Type  Quantity    Net Amt Net Amt Total   Code    Title   Item    A-Type  B-Type  Vendor_ID   Offline Indicator   company donotuse
file1   ZAR ZA  44056971    Family Monthly PAID 1   .061038 .061038 US3E40400141    subtitle1   person  1   1   US3E40400141    1   BlueMelon   
file2   ZAR ZA  44056975    Family Monthly PAID 1   .061038 .061038 US3E40400142    subtitle2   person2 1   1   US3E40400142    1   BlueMelon   
file3   ZAR ZA  44057007    Family Monthly PAID 1   .061038 .061038 US3E40400144    subtitle3   person3 1   1   US3E40400144    1   BlueMelon   
...
file179 ZAR ZA  44057330    Family Monthly PAID 1   .061038 .061038 US3E40400107    subtitle5   person5 1   1   US3E40400107    1   BlueMelon

私はシェルスクリプトに初めて触れました。正確には1週間の経験です。

最初のフィールドを追加するためにここまで来ましたが、詰まっています。

gawk 'NR==5;FNR>5 {print FILENAME,"\t",$0} /Row/ {f=0; nextfile} f' *.txt > result.txt

2番目のフィールド(スペアデータ4の値)を追加する方法がわかりません。

助けが必要ですか?ありがとうございます!

答え1

awk 'FNR == 4 { pd4=$2; };
     NR == 5 { print $0 " FILENAME PD4";};
     FNR == 6 { print $0 " " FILENAME " " pd4; nextfile; }' file1 file2

答え2

GNU awkがあるようですが、どうですか?

gawk '
  /^Row Count/ {nextfile} 
  NR == 5 {$0 = "Filename" OFS $0; print} 
  FNR > 5 {$0 =  FILENAME  OFS $0; print}
' OFS='\t' *.txt

関連情報