2016-12-14 107 views
1

我试图用awk找到file2$2file1$3之间的所有$3值查找值。如果file2$3中的值介于file1字段之间,那么它将与中的$6值一起打印。 file1file2都是tab-delimited以及所需的输出。如果没有可打印的内容,则处理下一行。下面的awk是接近,但使用我的实际~30MB文件它处理速度慢,打印在一个意想不到的格式。我不知道如何调整。谢谢 :)。awk的使用特定字段在另一个文件

file1的

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 

file2的

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 

回答

2

你的文件包含控制质谱所以print $0被缠绕到下一行。如果您不想打印id,请首先在它们上运行dos2unix或类似命令,然后在打印语句中仅包含, id

+1

非常感谢你:)。 – Chris

相关问题