如何使用AWK筛选基因与染色体匹配的唯一记录行?
解决方案
要实现每个基因($1)与染色体($2)的组合仅保留第一条记录,最可靠的方法是用AWK的关联数组跟踪已出现的组合,无需依赖数据排序:
核心命令
!seen[$1,$2]++ input.txt
命令解释
seen[$1,$2]:创建以基因+染色体为唯一键的关联数组,记录该组合是否已出现!seen[$1,$2]++:组合首次出现时,seen[$1,$2]初始值为0,取反后为真,打印当前行;后续同一组合出现时,数组值递增为非0,取反后为假,跳过打印- 该逻辑自动保留每个
基因-染色体组合的第一条匹配记录,同时保留对应的起始位置($3)
备选方案(仅适用于数据已按$1+$2连续排序的场景)
如果坚持用“和前一行比较”的思路,可使用以下脚本,但仅适用于同一基因-染色体组合的记录连续排列的情况:
BEGIN { prev1=""; prev2="" } { if ($1 != prev1 || $2 != prev2) { print $0 prev1 = $1 prev2 = $2 } }
将命令中的input.txt替换为你的实际文件名即可运行,输出结果完全符合期望。
内容的提问来源于stack exchange,提问作者LizDav
相关产品推荐
相关产品推荐

