提取文本文件里大于阈值的值?

提取文本文件里大于阈值的值?

我有一个数据文本文件如下:

数据=

arht    -0.0006 0.0001  0.0147  100.0   100.0
arht    -0.0006 0.0006  0.0133  100.0   100.0
bcmd    -0.0016 0.0010  0.0168  100.0   100.0
bcmd    -0.1012 0.0010  0.0184  100.0   100.0
bcmd     0.2011 0.0024  0.0126  100.0   100.0
.
.
.

我需要提取 2、3 和 4 列中大于 0.10 和 -0.10 的行。对于上述示例,最后两行中的 2、3 和 4 列包含大于 0.10 和 -0.10 的值。然后,输出文件应该是:

输出:

bcmd    -0.1012 0.0010  0.0184  100.0   100.0
bcmd     0.2011 0.0024  0.0126  100.0   100.0

答案1

在 中awk,当表达式求值为真时,默认操作是打印当前行。由于您需要检查数字的绝对值,因此忽略符号,一个简单的技巧(用户提到榆树在一个评论)是检查数字的平方根乘以自身(将返回正整数)是否大于阈值。因此,您可以简单地执行以下操作:

$ awk 'sqrt($2*$2)>=.1 || sqrt($3*$3)>=.1 || sqrt($4*$4)>=.1' file
bcmd    -0.1012 0.0010  0.0184  100.0   100.0
bcmd     0.2011 0.0024  0.0126  100.0   100.0

答案2

您还可以使用 awk 中的函数来检查范围有效性。

awk 'function fg(v) {return v<=-.1 || v>=.1 ? 1 : 0} (fg($2)+fg($3)+fg($4)){print}' mkl.txt 

或者更简单地说:

awk 'function fg(v) {return v<=-.1 || v>=.1 ? 1 : 0} fg($2)+fg($3)+fg($4)' mkl.txt 

您可以通过编辑 .1 和 -.1 来定义任何范围限制

相关内容