我实际上需要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的所有行。所以对于上面的行我只想保留第一行。
答案 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
是字段数)