awk过滤至少两列具有最小值的行?
awk to filter rows where at least two columns have minimum value?
我有一个包含 4 列和超过 100 万行的文件,分数在 0 到 100 之间。我能够过滤文件以保留行,其中至少一列的最小值为 20,代码看起来如下所示,使用 awk 和 OR 运算符(实际上我的文件有 50 列,所以我使用的代码一直到 $50 >= 20)。
awk '{if (( >= 20) || ( >=20) || ( >= 20) || ( >= 20)) print [=10=] }' file
但我现在想过滤至少有两列的最小值为 20 的行。我想不出满足此条件的 AND 运算符。有人可以推荐任何方法来实现这一目标吗?也许有不使用awk的解决方案?
谢谢!
Perhaps there is a solution that does not use awk?
perl
救援!
$ cat input.txt
1 2 3 4
30 5 6 60
7 8 9 10
11 100 12 120 13
$ perl -ane 'print if (grep { $_ >= 20 } @F) >= 2' input.txt
30 5 6 60
11 100 12 120 13
像 awk
那样根据空格将每一行拆分为字段,然后将这些字段过滤为仅大于或等于 20 的字段。如果至少有 2 个这样的字段,则打印整行。
使用您显示的示例,请尝试以下 awk
代码。公平警告只用小样本测试,没有在大文件上测试。
awk '
{
for(i=1;i<=NF;i++){
if($i>=20) { count++ }
if(count==2){ print;
count=0
fflush()
next
}
}
}' Input_file
我有一个包含 4 列和超过 100 万行的文件,分数在 0 到 100 之间。我能够过滤文件以保留行,其中至少一列的最小值为 20,代码看起来如下所示,使用 awk 和 OR 运算符(实际上我的文件有 50 列,所以我使用的代码一直到 $50 >= 20)。
awk '{if (( >= 20) || ( >=20) || ( >= 20) || ( >= 20)) print [=10=] }' file
但我现在想过滤至少有两列的最小值为 20 的行。我想不出满足此条件的 AND 运算符。有人可以推荐任何方法来实现这一目标吗?也许有不使用awk的解决方案?
谢谢!
Perhaps there is a solution that does not use awk?
perl
救援!
$ cat input.txt
1 2 3 4
30 5 6 60
7 8 9 10
11 100 12 120 13
$ perl -ane 'print if (grep { $_ >= 20 } @F) >= 2' input.txt
30 5 6 60
11 100 12 120 13
像 awk
那样根据空格将每一行拆分为字段,然后将这些字段过滤为仅大于或等于 20 的字段。如果至少有 2 个这样的字段,则打印整行。
使用您显示的示例,请尝试以下 awk
代码。公平警告只用小样本测试,没有在大文件上测试。
awk '
{
for(i=1;i<=NF;i++){
if($i>=20) { count++ }
if(count==2){ print;
count=0
fflush()
next
}
}
}' Input_file