使用awk消除具有由字段1指定的匹配并且在字段2的定义值内的记录

时间:2012-04-18 13:04:43

标签: awk

我有一个问题,我正在尝试使用awk来解决。它可用于选择优质的单核苷酸多态性(SNP)放置在SNP芯片上,其中要求SNP不在另一个SNP的60bp内。该文件如下所示:

comp1008_seq1 20
comp1008_seq1 234
comp1008_seq1 260
comp1008_seq1 500
comp3044_seq1 300
comp3044_seq1 350
comp3044_seq1 460
comp3044_seq1 600
................

当我们来自同一个组件时(基于字段1),我只想打印不在+ -60范围内的记录(基于字段2)。因此,当它们来自不同的组件(基于字段1)时,它们是否在+ -60范围内无关紧要。上例中的输出应如下所示:

comp1008_seq1 20
comp1008_seq1 234
comp1008_seq1 500
comp3044_seq1 300
comp3044_seq1 460
comp3044_seq1 600

1 个答案:

答案 0 :(得分:3)

http://ideone.com/h6oEI

{
        if ($1 != last1 || abs($2-last2) > 60 ) print   
        last1 = $1; last2 = $2
}

function abs(x){
        return x > 0 ? x : -x
}