我正在尝试使用awk
找到所有$3
file2
中的值介于 $2
之间和$3
在file1
。如果 $3
中的值的file2
介于 file1
之间字段,然后它与 $6
一起打印值 file1
。两者file1
和file2
是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
最佳答案
您的文件包含 control-Ms,因此 print $0
将换行到下一行。首先在它们上运行 dos2unix 或类似的命令,然后如果您不想打印 id
,则不要在打印语句中包含 , id
。
关于awk 使用另一个文件中的特定字段查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148775/