提取数字超过 N 的特定行

extract specific row with numbers over N

我有一个这样的数据框

1  3  MAPQ=0;CT=3to5;SRMAPQ=60
2  34  MAPQ=60;CT=3to5;SRMAPQ=67
4  56  MAPQ=67;CT=3to5;SRMAPQ=50
5  7  MAPQ=44;CT=3to5;SRMAPQ=61

使用 awk(或其他)

我想提取只有 SRMAPQ 超过 60 的行。

这意味着输出是

2  34  MAPQ=60;CT=3to5;SRMAPQ=67
5  7  MAPQ=44;CT=3to5;SRMAPQ=61

update: "SRMAPQ=60" can be anywhere in the line, MAPQ=44;CT=3to5;SRMAPQ=61;DT=3to5

您不必单独从 SRMAPQ 中提取值并进行比较。如果格式像上面一样固定,只需使用 = 作为字段分隔符并使用 $NF

访问最后一个字段
awk -F= '$NF > 60' file

或者如果 SRMAPQ 可以出现在行中的任何地方(如评论中更新的那样),请使用通用方法

awk 'match([=11=], /SRMAPQ=([0-9]+)/){ l = length("SRMAPQ="); v = substr([=11=], RSTART+l, RLENGTH-l) } v > 60' file

我会按照以下方式使用 GNU AWKfile.txt 内容成为

1  3  MAPQ=0;CT=3to5;SRMAPQ=60
2  34  MAPQ=60;CT=3to5;SRMAPQ=67;SOMETHING=2
4  56  MAPQ=67;CT=3to5;SRMAPQ=50
5  7  MAPQ=44;CT=3to5;SRMAPQ=61

然后

awk 'BEGIN{FS="SRMAPQ="}>60' file.txt

输出

2  34  MAPQ=60;CT=3to5;SRMAPQ=67;SOMETHING=2
5  7  MAPQ=44;CT=3to5;SRMAPQ=61

注意:添加了一些东西来测试当 SRMAPQ 不是最后一个时它是否可以工作。解释:我将 FS 设置为 SRMAPQ=,因此之前的内容成为第一个字段 (</code>),后面的内容成为第二个字段 (<code>)。在第 2 行中,这是 67;SOMETHING=2,GNU AWK 通过转换它的最长前缀来应对,在这种情况下构成数字 67,其他行只有数字。免责声明:此解决方案假定除最后一个字段外的所有字段都有尾随 ;,如果这不成立,请在使用前全面测试我的解决方案。

(在 gawk 4.2.1 中测试)