如果数字高于某个值,如何grep数字后跟数字

时间:2017-01-04 16:53:48

标签: bash awk grep

我实际上需要grep整行。我有一个带有一堆看起来像这样的行的文件

1  123213 A T . stuff=1.232;otherstuf=34;morestuff=121;AF=0.44;laststuff=AV
4  223152 D L . stuff=1.122;otherstuf=4;morestuff=41;AF=0.02;laststuff=RV

我想保留AF> 0.1的所有行。所以对于上面的行我只想保留第一行。

5 个答案:

答案 0 :(得分:2)

使用gnu-awk你可以这样做:

awk 'gensub(/.*;AF=([^;]+).*/, "\\1", "1", $NF)+0 > 0.1' file

1  123213 A T . stuff=1.232;otherstuf=34;morestuff=121;AF=0.44;laststuff=AV

gensub函数会从输入的最后一个字段中解析AF=<number>,并捕获捕获的组#1中的数字,用于与0.1进行比较。

PS:+0会将解析后的字段转换为数字。

答案 1 :(得分:1)

假设AF始终为0.NN形式,您只需匹配十位数为1-9的值,例如:

grep ';AF=0.[1-9][0-9];' your_file.csv

您可以在第二个字符组之后添加+以支持其他数字(即0.NNNNN),但如果值可能超出范围[0,1],则您不应该尝试将字段与正则表达式匹配。

答案 2 :(得分:1)

您可以将awk与多个分隔符一起使用来提取值并进行比较:

$ awk -F';|=' '$8 > 0.1' file

答案 3 :(得分:1)

$ awk -F= '$5>0.1' file
1  123213 A T . stuff=1.232;otherstuf=34;morestuff=121;AF=0.44;laststuff=AV

如果在针对您的实际数据运行时没有做您想做的事情,那么请编辑您的问题以提供更具真实代表性的样本输入/输出。

答案 4 :(得分:0)

我会使用awk。由于awk支持字母数字比较,因此您可以简单地使用它:

awk -F';' '$(NF-1) > "AF=0.1"' file.txt

-F';'将该行按;拆分为字段。 $(NF-1)解决该行中的倒数第二个字段。 (NF是字段数)