我正在寻找一种方法来删除多个csv文件中的行,在bash中使用sed,awk或任何适当的文件以0结尾。
因此有多个csv文件,其格式为:
EXAMPLEfoo,60,6
EXAMPLEbar,30,10
EXAMPLElong,60,0
EXAMPLEcon,120,6
EXAMPLEdev,60,0
EXAMPLErandom,30,6
因此该文件将被修改为:
EXAMPLEfoo,60,6
EXAMPLEbar,30,10
EXAMPLEcon,120,6
EXAMPLErandom,30,6
我能看到的一个问题是区分以零结尾的双位数和0本身。
所有想法?
答案 0 :(得分:9)
使用您的文件,这样的东西?
$ sed '/,0$/d' test.txt
EXAMPLEfoo,60,6
EXAMPLEbar,30,10
EXAMPLEcon,120,6
EXAMPLErandom,30,6
答案 1 :(得分:5)
对于这个特殊问题,sed
是完美的,正如其他人所指出的那样。但是,awk
更灵活,即您可以在任意列上进行过滤:
awk -F, '$3!=0' test.csv
这将打印整行第3列不是0。
答案 2 :(得分:2)
使用sed仅删除以“,0”结尾的行:
sed '/,0$/d'
答案 3 :(得分:2)
你也可以使用awk,
$ awk -F"," '$NF!=0' file
EXAMPLEfoo,60,6
EXAMPLEbar,30,10
EXAMPLEcon,120,6
EXAMPLErandom,30,6
这只是说检查0
的最后一个字段,如果找到则不打印。
答案 4 :(得分:2)
sed '/,[ \t]*0$/d' file
答案 5 :(得分:2)
我倾向于sed,但也有一个egrep(或:grep -e)-solution:
egrep -v ",0$" example.csv