我有一个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。
答案 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