awk:如何过滤掉所有条目(16列)为0的行

时间:2013-11-15 17:23:49

标签: csv filter awk

我的CSV文件由制表符分隔,我想过滤掉那些包含0值的所有条目(16列)的行。我现在正在做这个

awk '$1 != 0 && $2 != 0 && ....omitted && $16 != 0 {print $0}' file.csv > newFile.csv

正如您所看到的,为所有16列输入相同的条件是非常累人的。有没有更简单的方法?

3 个答案:

答案 0 :(得分:5)

这样的东西
grep -Ev '^0+([[:space:]]+0+){15}$' file.csv

awk --posix '!/^0+([[:space:]]+0+){15}/'

答案 1 :(得分:4)

这样的事情怎么样(假设你有16个字段)

awk '{for (i=1; i<=16; ++i) if($i != 0) {print;next}}' file.csv > newFile.csv

答案 2 :(得分:3)

也可以这样做:

sed -n '/[^0\t]/p' file.csv

只有当字符与0\t(制表符)不同时,此命令才会打印该行。或者你也可以这样做:

sed '/[^0\t]/!d' file.csv

删除所有没有(!)的行与正则表达式[^0\t]匹配。