当一个文件的列包含另一个文件在给定范围之间的位置时,使用Awk和Condition捕获行



我想确定每个基因的得分然而,为此,我需要设置一个条件来识别分数(第3列分数列表),该分数位于基因列表的第3列和第4列的给定范围之间的一个位置

基因列表:

chr1    TAS1R1  6615000 6615100
chr1    TAS1R1  6615130 6615200
chr5    TCERG1  145858055   145858216

分数列表:

rs79923433 chr1 6615060 0.327009537545002 0.177578086220885
rs4908925 chr1 6615107 0.492182375024342 0.278821401692196
rs114220820 chr1 6615172 0.24581165286421 0.129806066087895
rs925345 chr5 145858100 1.22569136462918 0.744498627741366

我想要什么:

chr1    TAS1R1  6615000 6615100 0.327009537545002
chr1    TAS1R1  6615130 6615200 0.24581165286421
chr5    TCERG1  145858055   145858216 1.22569136462918

带awk:

awk '
    NR == FNR {score[$3] = $4; next}
    {
        for (key in score) 
            if ($3 <= key && key <= $4) 
                print $0, score[key]
    }
' score.list gene.list 
chr1    TAS1R1  6615000 6615100 0.327009537545002
chr1    TAS1R1  6615130 6615200 0.24581165286421
chr5    TCERG1  145858055   145858216 1.22569136462918

这并不是非常有效,因为你必须迭代每一行基因的所有分数,但它非常简单。

最新更新