bash 循环中的 awk 未处理文件头

问题描述 投票:0回答:1

我有一个带标题的 csv 文件,预计有 14 个字段。
我的

gawk
脚本检查文件并将好行和坏行写入 2 个单独的文件。
但是,标题行不会输出到这两个文件。这是唯一缺失的一行。

while read -r line; 
do
   gawk -k '{if (NF==14) print $0 > "good_file.csv";     \
                         else print "["NR"]", "["NF"]", $0 > "bad_file.csv"}';
done < hd.csv

csv 输入文件示例:

hd.csv

test_id,vehicle_id,test_date,test_class_id,test_type,test_result,test_mileage,postcode_area,make,model,colour,fuel_type,cylinder_capacity,first_use_date
1645480751,1374211238,2016-01-01,4,NT,P,117033,SM,VOLKSWAGEN,POLO,BLACK,PE,1600,2000-06-23
1393462389,1153769898,2016-01-01,4,NT,P,99292,NE,VOLKSWAGEN,PASSAT,BLUE,DI,1968,2006-11-30
1863202023,1485039300,2016-01-01,7,NT,PRS,170320,E,MERCEDES,SPRINTER 313 CDI LWB,WHITE,DI,2148,2005-01-14
1304292863,1097073904,2016-01-01,4,RT,P,70623,NN,MINI,MINI,GREY,PE,1598,2004-04-08
845810407,1166548800,2016-01-01,4,NT,P,21567,DL,NISSAN,JUKE,BLUE,PE,1612,2011-07-07

我可以看到标题行有 14 个字段。

gawk -k '{print NF, $0}' hd.csv

14 test_id,vehicle_id,test_date,test_class_id,test_type,test_result,test_mileage,postcode_area,make,model,colour,fuel_type,cylinder_capacity,first_use_date
14 1645480751,1374211238,2016-01-01,4,NT,P,117033,SM,VOLKSWAGEN,POLO,BLACK,PE,1600,2000-06-23

我不明白为什么标题行被跳过。

bash csv awk
1个回答
0
投票

你不需要 while 或 if

awk -F, 'NF==14 {print>"good.csv";next} {print "["NR"] ["NF"] " $0>"bad.csv"}' hd.csv
© www.soinside.com 2019 - 2024. All rights reserved.