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