Fügen Sie Dateien mit variablen Spalten- und Zeilennummern und basierend auf einem Feld hinzu

313
Elham

Entschuldigung im Voraus, wenn es zu einfach ist, ich bin ein Neuling. Ich habe zwei Dateien (file1 und file2). Ich möchte in file1 Spalte 6 nachsehen und wenn es mit einem Eintrag in Spalte 1 von File 2 übereinstimmt, den Inhalt dieser Zeile bis zum Ende von File 1 ausgeben, um eine neue Datei zu erstellen. Nachfolgend sehen Sie, wie meine Dateien aussehen und wie sie mir gefallen. Ich habe es unten versucht und es funktioniert nicht, die Ausgabe ist leer.

sort -k6 file 1 > file1_sorted  sort –k1 file2 > file2_sorted  join -1 6 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13 file1_sorted file2_sorted > file3 

Dies kann daran liegen, dass der Join falsch ist oder weil die Datei 1 nicht ordnungsgemäß sortiert ist oder beides. Beide Dateien sind csv, Datei 2 ist in Ordnung, aber Datei 1 scheint nach der letzten Spalte einige leere Leerzeichen zu haben, wenn ich versuche, Spalte 6 von file1 über auszuwählen awk ' file 1 >test, funktioniert es nicht. Ich habe keine Ahnung, warum. Ich habe versucht, Tabs mit sedusw. zu entfernen, aber kein Glück. Bitte helfen

Datei 1 (5052 Zeilen, 6 Spalten)

rs28595482,1,1,1953576,ENSG00000187730,GABRD rs2376805,1,1,1956362,ENSG00000187730,GABRD rs2229110,1,1,1957037,ENSG00000187730,GABRD rs3820007,1,1,1957299,ENSG00000187730,GABRD rs28409373,1,1,1959978,ENSG00000187730,GABRD rs2376803,1,1,1967954,NA,GABRD rs11582799,1,1,7832026,ENSG00000269925,VAMP3 

Datei 2 (344 Zeilen, 13 Spalten)

GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 ABCG1,21,0,0,0,0,cort,0,0,0,0,0,0 VAMP3,0,0,0,0,0,0,0,0,0,0,0,0 ADAMTS2,0,0,0,0,0,0,0,0,0,0,0,0 ADAMTSL1,9,0,0,0,0,0,oxt,0,0,0,0,rest ADCY7,16,0,0,0,0,cort,0,0,0,0,0,0 

Was ich erwartet, nach etwas Magie zu bekommen (Datei 3)

rs28595482,1,1,1953576,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs2376805,1,1,1956362,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs2229110,1,1,1957037,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs3820007,1,1,1957299,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs28409373,1,1,1959978,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs2376803,1,1,1967954,NA,GABRD, 16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs11582799,1,1,7832026,ENSG00000269925, VAMP3,0,0,0,0,0,0,0,0,0,0,0,0 
0
dass rs in der fünften Zeile von Datei 1 in der nächsten Zeile stehen sollte, nicht sicher, warum es so kommt. Ich habe versucht, es zu bearbeiten, aber es zeigt das gleiche. Elham vor 7 Jahren 0

1 Antwort auf die Frage

0
Greg Tarsa

Sie sind so nah . joinIn diesem Fall erfahren Sie, was Sie für den Eingangsabschluss verwenden müssen -t,:

join -t, -1 6 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13 file1_sorted file2_sorted > file3 

Übrigens, gute Arbeit, um das Problem zu beschreiben und ein Beispiel zu geben. Das Debuggen war damit problemlos möglich.