首页 > 解决方案 > 提取数字超过 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

更新:“SRMAPQ=60”可以是行中的任意位置,MAPQ=44;CT=3to5;SRMAPQ=61;DT=3to5

标签: dataframeawk

解决方案


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

awk -F= '$NF > 60' file

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

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

推荐阅读