如何只选择所有列中具有相同字符串的行,并在linux中使用不同标题的第一行

时间:2013-12-06 12:15:51

标签: linux shell

我有一个包含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

1 个答案:

答案 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在获得“真实”值时为真。因此,$i0将为false。

基于这种方法,我们遍历所有值。如果一个值为True,意味着不是0,那么我们会next,这意味着该行不再被分析。对于其他情况(第2到第200列为0或为空),next未完成,因此它解释1,这使得{print $0}被执行