awk使用另一个文件中的特定字段查找值

awk使用另一个文件中的特定字段查找值,awk,Awk,我正在尝试使用awk查找file2中$2和file1中$3之间的所有$3值。如果file2的$3中的值在file1字段之间,则它将与file1中的$6值一起打印。file1和file2都是制表符分隔的以及所需的输出。如果没有要打印的内容,则处理下一行。下面的awk很接近,但使用我的实际~30MB文件,它处理速度很慢,并以意外的格式打印。我也不知道如何调整。谢谢:) file1 chr1 948953 948956 chr1:948953-948956 . ISG15 chr1

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

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
文件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
所需输出

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-F'\t'-v OFS='\t''
NR==FNR{min[NR]=$2;max[NR]=$3;Gene[NR]=$NF;next}
{                
用于(id以分钟为单位)
如果(最小[id]<3美元&和$3<最大[id]){
打印$0,id,基因[id]
打破
}
}                                     
'文件1文件2

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