我有一个包含 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
最佳答案
像这样,例如:
$ 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
根据您的意见
that is for example but i want to do that from column 2 to 200th
这可以是一种方式:
$ 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
时将为假。
基于该方法,我们遍历所有值。如果一个值是 True,表示不是 0
,那么我们执行 next
,这意味着不再分析该行。对于其余情况(第 2 至 200 列为 0
或为空),next
未完成,因此它解释 1
,它使 {print $0}
被执行。
关于linux - 如何在 linux 中仅选择具有不同标题第一行的所有列中具有相同字符串的那些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20423699/