awk csv:仅打印第6列中的值大于1的行

时间:2015-08-16 21:06:49

标签: csv awk

我有一个30 000+行CSV文件,我不需要大部分文件。 它来自我的供应商,我只想要值大于1的行,所以第6列中的0行显示数量为1或更多我希望它打印。

所以我注意到awk命令我得到了奇怪的数据,有人告诉我这是因为第6列中0前面的前导空格

awk '{ print $6 }'
2.1
Link
LAN
SATA
and
2U
SATA
1U
... goes on forever

有没有办法过滤掉所有无用的线条!

这是我尝试这样做的

awk -F '$6 <= 1 {print $0}' 

以下是几行

  

100005,PC-Q08A,联力机箱PC-Q08A迷你塔1/0/6风扇铝合金USB3.0银Mini-ITX零售,联力,CS,0,145.98,7.92,EA,LB,CSB, ACTIVE,840353002388

     

100006,PC-Q08B,联力机箱PC-Q08B迷你塔1/0/6风扇铝合金USB3.0黑色Mini-ITX零售,联力,CS,0,127.28,7.92,EA,LB,CSB, ACTIVE,840353002395

     

100011,EAH5450SILENT / DI / 1GD3(LP),华硕视频卡ATI Radeon HD 5450 1GB DDR3 64Bit低配置静音PCI-Express 2.1 DVI-I / HDMI / HDCP零售,华硕TeK,VC,64,43.93,0.90 ,EA,LB,V1G,ACTIVE 610839367436

     

100012,E783686,EloTouch LCD 19英寸1919L E783686 IntelliTouch VGA 1000:1 5m深灰色零售,Elo TouchSystems,MN,0,748.84,21.50,EA,LB,ML9,ACTIVE,NA

第3行的数量是64,我想要的是这条线;其余的我没有。注意它在第3行中的第6个字段是64。

1 个答案:

答案 0 :(得分:3)

在我看来,你只是忽略了&#34;,&#34; -F的参数,也有向后比较。 (并且它不是不正确的,但您并不真正需要{print $0},因为这是默认操作。)

$ cat file.txt
100005,PC-Q08A,Lian-Li Case PC-Q08A Mini Tower 1/0/6 FAN Aluminum USB3.0 Silver Mini-ITX Retail,Lian-Li,CS, 0,145.98,7.92,EA,LB,CSB,ACTIVE,840353002388
100006,PC-Q08B,Lian-Li Case PC-Q08B Mini Tower 1/0/6 FAN Aluminum USB3.0 Black Mini-ITX Retail,Lian-Li,CS, 0,127.28,7.92,EA,LB,CSB,ACTIVE,840353002395
100011,EAH5450SILENT/DI/1GD3(LP),Asus Video Card ATI Radeon HD 5450 1GB DDR3 64Bit Low Profile Silent PCI-Express 2.1 DVI-I/HDMI/HDCP Retail,ASUS TeK,VC, 64,43.93,0.90,EA,LB,V1G,ACTIVE,610839367436
100012,E783686,EloTouch LCD 19inch 1919L E783686 IntelliTouch VGA 1000:1 5m Dark Gray Retail,Elo TouchSystems,MN, 0,748.84,21.50,EA,LB,ML9,ACTIVE,NA194170,46.9,42.2


$ awk -F, '$6 >= 1' file.txt
100011,EAH5450SILENT/DI/1GD3(LP),Asus Video Card ATI Radeon HD 5450 1GB DDR3 64Bit Low Profile Silent PCI-Express 2.1 DVI-I/HDMI/HDCP Retail,ASUS TeK,VC, 64,43.93,0.90,EA,LB,V1G,ACTIVE,610839367436

对于您在第6个字段中看到的奇怪数据,您再次错过了字段分隔符参数:

$ awk -F, '{ print $6 }' file.txt
0
0
64
0