我有一个包含200列的文本文件,如:
sample1 0 12 11 23 12
sample2 3 16 89 12 0
sample3 0 0 0 0 0
sample4 33 22 0 0 0
sample5 0 0 0 0 0
我只想要那些从第2列到第6列只有0的行。所需的输出是:
sample3 0 0 0 0 0
sample5 0 0 0 0 0
答案 0 :(得分:4)
像这样,例如:
$ awk '!$2 && !$3 && !$4 && !$5 && !$6' file
sample3 0 0 0 0 0
sample5 0 0 0 0 0
与以下内容相同:
$ awk '!($2 || $3 || $4 || $5 || $6)' file
sample3 0 0 0 0 0
sample5 0 0 0 0 0
根据你的评论
这是例如,但我想从第2列到第200列
这可以是一种方式:
$ awk '{for (i=2;i<=200;i++) if ($i) {next}}1' file
sample3 0 0 0 0 0
sample5 0 0 0 0 0
请注意,$i
是指位置i
中的字段。 $i
在获得“真实”值时为真。因此,$i
时0
将为false。
基于这种方法,我们遍历所有值。如果一个值为True,意味着不是0
,那么我们会next
,这意味着该行不再被分析。对于其他情况(第2到第200列为0
或为空),next
未完成,因此它解释1
,这使得{print $0}
被执行