Ich versuche awk
zu verwenden, um alle $3
Werte in file2
zu finden, die zwischen $2
und $3
in file1
sind. Wenn ein Wert in $3
von file2
zwischen den Feldern file1
ist, wird er zusammen mit dem Wert $6
in file1
gedruckt. Sowohl file1
als auch file2
sind tab-delimited
sowie die gewünschte Ausgabe. Wenn nichts zu drucken ist, wird die nächste Zeile verarbeitet. Die awk
unten ist in der Nähe, aber mit meiner tatsächlichen ~30MB
Datei verarbeitet es langsam und druckt in einem unerwarteten Format. Ich bin mir nicht sicher, wie ich mich einstellen soll. Vielen Dank :).awk Wert nachzuschlagen bestimmte Felder in einer anderen Datei mit
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
Stromausgang
rs6657048 1 957640 CC
4 AGRN
rs4511111 1 949375 GG
2 ISG15
gewünschte Ausgangs
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
Vielen Dank :). – Chris