当行中有一列的值小于一时,如何删除该行

当行中有一列的值小于一时,如何删除该行

我有一个包含 7000 行和 28 列的文件。如果 28 列中有一列的值小于 1,如何删除该行?

我找到了答案,awk当指定一列时,他们会删除一行。

但我想删除该行,而不管列号的值小于一。

我的文件是制表符分隔格式。
示例文件

a       1       2       4       7       9
b       0.5     0.9     6       10      3
c       3       5       12      7       9
d       0.9     6       7       4       10

答案1

在 Awk 中,您将循环遍历字段(列)并测试每个字段。由于您的行的第一列不是数字,因此请从第二列(i=2)开始:

所以

awk '{for(i=2;i<=NF;i++){if($i+0 < 1) next}} 1' file

例如给定

$ cat example
a       1       2       4       7       9
b       0.5     0.9     6       10      3
c       3       5       12      7       9
d       7.96681779026634e-05     6       7       4       10

然后

$ awk '{for(i=2;i<=NF;i++){if($i+0 < 1) next}} 1' example
a       1       2       4       7       9
c       3       5       12      7       9

在 Perl 中,你可以在移出第一列后使用grep默认的拆分数组:@F

perl -ane 'shift @F; print unless grep { $_ < 1 } @F' file

相关内容