タブで区切られた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