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