Schnittpunkt zweier Dateien gemäß der ersten Spalte

7

Ich habe zwei Dateien in Datei A, es gibt Sequenznummern in der anderen Datei B, es gibt viele Spalten und die erste Spalte enthält Sequenznummern. Ich möchte eine Datei mit allen Zeilen in B mit den Sequenznummern erhalten, die sich in befinden das A wie kann ich das erreichen? Vielen Dank

wie Datei A.

1
3
8
9
20

Datei B.

1 kfjk 3243424
2 fkdkf 23543592
3 iefjk 21493402
7 dlafdl 23435231
8 kfkdlkf 309834
wenzi
quelle
2
Bessere Probenein- und -ausgabe.
Gilles Quenot

Antworten:

10

Du willst join (1), denke ich:

Schreiben Sie für jedes Paar von Eingabezeilen mit identischen Verknüpfungsfeldern eine Zeile in die Standardausgabe. Das Standard-Join-Feld ist das erste, das durch Leerzeichen begrenzt wird. Wenn FILE1 oder FILE2 (nicht beide) - ist, lesen Sie die Standardeingabe.

[0 1075 12:50:10] ~/temp/sx % join A B
1 kfjk 3243424
3 iefjk 21493402
8 kfkdlkf 309834
join: file 1 is not in sorted order

OK, anscheinend müssen Sie dies kombinieren sort (1), um nach dem Alpha-Wert zu sortieren (kein numerischer Wert, also 20 <3).

join <(sort A) <(sort B)funktioniert für mich, aber das sieht komisch aus und könnte eine zsh-Erweiterung sein. Es schadet nichts

sort A > A.tmp; sort B > B.tmp; join A.tmp B.tmp

(Überprüfen Sie wie gewohnt die Manpages auf Fallstricke.)

Ulrich Schwarz
quelle
1
Process Substitution ( join <(sort A) <(sort B)) funktioniert gut in Bash :-)
Will Vousden