
Ich habe zwei Dateienstat_1.txtundstat_2.txt. Wie folgt:
Job-ID | Ausführungszeit
--------+--------------------
12345 | 00:04:42.454282
12346 | 00:03:26.360487
====================
Job-ID | Ausführungszeit
--------+--------------------
12347 | 00:01:43.634521
12345 | 00:02:34.321451
Natürlich gibt es in jeder Datei noch Tausende weiterer Datensätze. Ich muss in einer einzigen Datei dieJob-IDdie in beiden Dateien vorhanden sind, um eine vergleichende Analyse der Ausführungszeiten durchzuführen. (ähnlich dem, was wir bei einer Tabellenverknüpfung tun würden.) Wie mache ich das? Ich bin sicher, dass es in Bash einen eleganten Weg geben muss.
Die Dateien sindnicht bestelltnach Job-ID. Es gibt einige Job-IDs, die nur in einer Datei vorhanden sind, aber nicht in der anderen. (Tut mir leid, wenn die Tabellen oben schlampig aussehen. Ich bin mit der Formatierung nicht vertraut und habe es etwas eilig.)
Antwort1
So kannst du es machen
awk 'NR==FNR{a[$1$2]=$3;next}
{k=$1$2;print k,a[k],$3;delete a[k]}
END{for(k in a)print k,a[k]}' test1 test2
test1 und test2 sind die beiden zu kombinierenden Dateien
Hier ist das Beispiel:
[xxxx@xxxx test]$ awk 'NR==FNR{a[$1$2]=$3;next}
{k=$1$2;print k,a[k],$3;delete a[k]}
END{for(k in a)print k,a[k]}' test1 test2
job_id | execution_time execution_time
--------+--------------------
12347 | 00:01:43.634521
12345 | 00:04:42.454282 00:02:34.321451
12346 | 00:03:26.360487