从csv文件bash,sed,bash中删除一行

时间:2010-04-15 14:25:07

标签: bash command-line sed

我正在寻找一种方法来删除多个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本身。

所有想法?

6 个答案:

答案 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