Kombinieren Sie zwei Dateien mit demselben Format basierend auf den Werten einer bestimmten Spalte

Kombinieren Sie zwei Dateien mit demselben Format basierend auf den Werten einer bestimmten Spalte

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

verwandte Informationen