我有一个包含 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