提取数字超过 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 AWK
让 file.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 中测试)
我有一个这样的数据框
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 AWK
让 file.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 中测试)