使用 AWK 合并文件

使用 AWK 合并文件

我有一个包含 179 个制表符分隔的文本文件的文件夹。它们都具有相同的格式。这是示例数据的链接:

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

(此示例有 5 个标头、我想要的 5 行数据以及我所做的所有尾随数据不是想。)

我想完全删除前四个标题行,然后使用第五行作为组合数据的单个文件中所有行的标题 - 不包含尾随数据。

我还想附加两个字段:一个文件名字段,一个用于 Prelim 4 的值。因此输出如下所示:

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

我对 shell 脚本完全是菜鸟。确切地说是1周的经验。

要添加第一个字段,我已经走到这一步了,但陷入了困境:

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

我不知道如何添加第二个字段(Prelim Data 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

相关内容