如何根据列中的某些值提取行?

如何根据列中的某些值提取行?

我有一个如下的 bam 文件(它只是一个子集),我想根据 chr (第三列中的 2)和起始位置(第四列中的 13107 到 14348)提取行。

输入:

D00823:135:HYNH5BCX2:2:2212:6147:34072  256 1   13039   1   51M *   0   0   GCACATTGCTAAGTGGAAGAAGACAGTCTGAGGAGGATACACACAGTGTGA DDDDDIIIHHIHIIIIIGIEHIIGHIIIGIIII?GHHGIIIIIIIIIIIII AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:51 YT:Z:UU NH:i:10 RG:Z:I19-1116-18-56202EE2
D00510:603:HYNMJBCX2:1:2114:6725:52665  256 1   13039   1   51M *   0   0   GCACATTGCTAAGTGGAAGAAGACAGTCTGAGGAGGATACACACAGTGTGA DDDDDIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:51 YT:Z:UU NH:i:10 RG:Z:I19-1116-18-43662E24
D00510:603:HYNMJBCX2:2:1108:18476:88773 256 2   13107   1   51M *   0 0 CTGGAGAAGGCAAACTACACAGATGGGAAGCCATTGGCTCCATGGGGTGGG  
DDBBDHIIIIIHHGIIIIHHCHHIHCHHHHIIIIGIHHHIIIIIIHFHIHI AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:51 YT:Z:UU NH:i:10 RG:Z:I19-1116-18-526BA999
D00823:135:HYNH5BCX2:1:1216:2815:76028  256 2   14348   1   49M *   0   0   TGTTATTGAAGTGAAGCAGAATTGTTTTTACTAATCTGCTTATTACCCA    
DDDDDHIHFHIIGHIHIIHIGIIIIIIIIIIHHHHIIIIIHHIIHHIII   AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:49 YT:Z:UU NH:i:10 RG:Z:I19-1116-18
D00823:135:HYNH5BCX2:1:2107:4561:30492  256 2   14348   1   49M *   0   0   TGTTATTGAAGTGAAGCAGAATTGTTTTTACTAATCTGCTTATTACCCA   BDDDAHHHHHIHIIIIIIIIIIIIIIIIIIIIIHIIIHIIIHIIIIIII   AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:49 YT:Z:UU NH:i:10 RG:Z:I19-1116-18
D00510:603:HYNMJBCX2:1:2205:16091:50653 256 2   14350   1   49M *   0   0   TGTTATTGAAGTGAAGCAGAATTGTTTTTACTAATCTGCTTATTACCCA   DDDDDIIIIIIIIHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHI   AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:49 YT:Z:UU NH:i:10 RG:Z:I19-1116-18-43662E24

输出:

D00510:603:HYNMJBCX2:2:1108:18476:88773 256 2   13107   1   51M *   0   0   CTGGAGAAGGCAAACTACACAGATGGGAAGCCATTGGCTCCATGGGGTGGG  
DDBBDHIIIIIHHGIIIIHHCHHIHCHHHHIIIIGIHHHIIIIIIHFHIHI AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:51 YT:Z:UU NH:i:10 RG:Z:I19-1116-18-526BA999
D00823:135:HYNH5BCX2:1:1216:2815:76028  256 2   14348   1   49M *   0   0   TGTTATTGAAGTGAAGCAGAATTGTTTTTACTAATCTGCTTATTACCCA    
DDDDDHIHFHIIGHIHIIHIGIIIIIIIIIIHHHHIIIIIHHIIHHIII   AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:49 YT:Z:UU NH:i:10 RG:Z:I19-1116-18
D00823:135:HYNH5BCX2:1:2107:4561:30492  256 2   14348   1   49M *   0   0   TGTTATTGAAGTGAAGCAGAATTGTTTTTACTAATCTGCTTATTACCCA   BDDDAHHHHHIHIIIIIIIIIIIIIIIIIIIIIHIIIHIIIHIIIIIII   AS:i:0  ZS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:49 YT:Z:UU NH:i:10 RG:Z:I19-1116-18

答案1

我的解决方案:

awk '$3 == 2 && $4 >= 13107 && $4 <= 14348' input.txt

答案2

使用awk和 if 条件:

awk '{ if ($3=2 && $4<14349 && $4>13106) print $0 }' input

相关内容