2016-12-14 1 views
1

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 

Antwort

2

Ihre Dateien enthalten Steuer-Ms so print $0 auf die nächste Zeile Einwickeln. Führen Sie dos2unix oder ähnliches zuerst aus und fügen Sie dann , id in die print-Anweisung nicht ein, wenn Sie nicht möchten, dass die id gedruckt wird.

+1

Vielen Dank :). – Chris

Verwandte Themen