Ich möchte eine schreiben shell script
, die zwei Dateien A
und B
und ein Ergebnis wie dieses erhalten:
Datei A
:
user_a tel_a addr_a
user_b tel_b addr_b
Datei B
:
process_1 user_a
process_2 user_a
process_3 user_b
Und das Ergebnis:
user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b
Wie kann ich das machen? awk
oder etwas anderes?
text-processing
awk
join
Navid Farhadi
quelle
quelle
cut
und gemacht werdenpaste
, aber ich verstehe die Synthax nicht richtig.cut
undpaste
sehen Sie sich deren Handbuchseite an.Antworten:
join
...Ausgabe
Die Eingabedateien müssen nach dem Schlüsselfeld sortiert werden ... Ihre Beispieldateien sind bereits sortiert, sodass keine Notwendigkeit bestand. Andernfalls können Sie die Sortierung wie folgt einfügen.
quelle
man join
in die Befehlszeile des Terminals ...-1 2 -2 1
Mittel: Werden Sie Mitglied auf dem ‚1st-Datei 2.-Feld‘ und die ' 2. Datei 1. Feld 'Da
join
undpaste
nicht überall verfügbar sind (sie befinden sich beispielsweise nicht auf meinem BusyBox-basierten System), gehen Sie wie gewünscht mit awk vor:quelle
A[$1]=$2 OFS $3
... Hier ist eine andere Variante, die die manuelle Schleife in BEGIN vermeidet, aber sie ist ziemlich gleich (zu awk ), obwohl sie einen ansonsten unnötigen Bedingungstest für die zweite Datei einführt:awk 'NR==FNR {A[$1]=$2 OFS $3;next} {print $2, $1, A[$2]}' fileA fileB
... (+ 1)