【问题标题】:awk to lookup value using specific fields in another fileawk 使用另一个文件中的特定字段查找值
【发布时间】:2016-12-15 02:30:06
【问题描述】:

我正在尝试使用awk 来查找file2 中的所有$3 值,这些值介于file1 中的$2$3 之间。如果$3file2 中的值介于file1 字段之间,则它与file1 中的$6 值一起打印。 file1file2 都是 tab-delimited 以及所需的输出。如果没有要打印的内容,则处理下一行。下面的awk 很接近,但使用我的实际~30MB 文件处理速度很慢并且以意外格式打印。我也不知道如何调整。谢谢你:)。

文件1

chr1    948953  948956  chr1:948953-948956  .   ISG15
chr1    949363  949858  chr1:949363-949858  .   ISG15
chr1    955542  955763  chr1:955542-955763  .   AGRN
chr1    957570  957852  chr1:957570-957852  .   AGRN
chr1    976034  976270  chr1:976034-976270  .   AGRN

文件2

rs13303106  1   891945  GG
rs28415373  1   893981  CC
rs13303010  1   894573  AA
rs6696281   1   903104  CC
rs28391282  1   904165  GG
rs6657048   1   957640  CC
rs2710888   1   959842  CT
rs3128126   1   962210  AG
rs2710875   1   977780  CT
rs4511111   1   949375  GG

电流输出

rs6657048   1   957640  CC  
4   AGRN
rs4511111   1   949375  GG  
2   ISG15

期望的输出

rs6657048   1   957640  CC  AGRN
rs4511111   1   949375  GG  ISG15

awk

awk -F'\t' -v OFS='\t' '                   
NR == FNR {min[NR]=$2; max[NR]=$3; Gene[NR]=$NF; next}
{                
    for (id in min) 
        if (min[id] < $3 && $3 < max[id]) {
            print $0, id, Gene[id]
            break              
        }
}                                     
' file1 file2

【问题讨论】:

    标签: awk


    【解决方案1】:

    您的文件包含 control-Ms,因此print $0 将换行到下一行。首先在它们上运行 dos2unix 或类似的,然后如果您不想打印 id,则不要在打印语句中包含 , id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 2013-02-04
      • 2014-01-20
      • 1970-01-01
      相关资源
      最近更新 更多