File1.txt
item1 carA
item2 carB
item3 carC
item4 platD
item5 carE
File2.txt
carA platA
carB platB
carC platC
carE platE
Gewünschte Ausgabe:
item1 platA
item2 platB
item3 platC
item4 platD
item5 platE
Wie kann ich es tun?
command-line
text-processing
awk
Pawana
quelle
quelle
Ich weiß, dass Sie gesagt haben
awk
, aber es gibt einenjoin
Befehl für diesen Zweck ...Mit dem ersten
join
Befehl würde es ausreichen, wenn diese Zeile nicht wäre:Der Befehl lautet im Wesentlichen: Join basierend auf der zweiten Spalte der ersten Datei (
-1 2
) und der ersten Spalte der zweiten Datei (-2 1
) und Ausgabe der ersten Spalte der ersten Datei und der zweiten Spalte der zweiten Datei (-o 1.1,2.2
). Das zeigt nur die gepaarten Linien. Der zweite Join-Befehl sagt fast dasselbe aus, zeigt jedoch die Zeilen aus der ersten Datei an, die nicht gepaart werden konnten (-v 1
), und gibt die erste Spalte der ersten Datei und die zweite Spalte der ersten Datei (-o 1.1,1.2
) aus. Dann sortieren wir die Ausgabe von beiden kombiniert.sort -k 1
bedeutet sortieren nach der ersten Spalte undsort -k 2
bedeutet sortieren nach der zweiten Spalte . Es ist wichtig, die Dateien nach der Join-Spalte zu sortieren, bevor Sie sie an übergebenjoin
.Jetzt habe ich die Sortierung zweimal geschrieben, weil ich meine Verzeichnisse nicht gerne mit Dateien verunreinige, wenn ich helfen kann. Wie David Foerster jedoch sagte, möchten Sie je nach Größe der Dateien die Dateien möglicherweise sortieren und zuerst speichern, um nicht zweimal warten zu müssen. Um eine Vorstellung von den Größen zu bekommen, ist hier die Zeit, die benötigt wird, um 1 Million und 10 Millionen Zeilen auf meinem Computer zu sortieren:
Das sind 1,5 Sekunden für 1 Million Zeilen und 19 Sekunden für 10 Millionen Zeilen.
quelle
%E
im Zeitformat) weniger interessant, um die Rechenleistung zu messen. Die CPU-Zeit im Benutzermodus (%U
oder einfach eine nicht gesetzteTIMEFORMAT
Variable) wäre viel aussagekräftiger.%U
.