Erläuterung

Erläuterung

Ich habe 2 Dateien.

Datei 1 enthält: -

emcas_biaas_dev=-628
emcas_brs_ba=-32
emcas_cc_analytics=246
emcas_edservices_bi=312
emcas_edservices_dev=-159
emcas_engr_usd=1519
emcas_engr_xio=-67
emcas_fin_bi=9

und Datei 2 enthält: -

emcas_bdl_migrate=2
emcas_biaas_dev=63
emcas_brs_ba=430
emcas_cc_analytics=2231
emcas_clm_reporting=16
emcas_collab_xsat=6241
emcas_cpsd_cee=11
emcas_cpsd_hcp=0
emcas_e2ep_ba=187
emcas_edservices_bi=955
emcas_edservices_dev=374
emcas_elms_analytics=0
emcas_engr_clm=3
emcas_engr_scaleio=0
emcas_engr_usd=2669
emcas_engr_xio=340
emcas_fin_bi=333
emcas_fin_drr=5528

Ich möchte die gewünschte Ausgabe in einer separaten Datei als: -

emcas_biaas_dev=-628=63
emcas_brs_ba=-32=430
emcas_cc_analytics=246=2231
emcas_edservices_bi=312=955
emcas_edservices_dev=-159=374
emcas_engr_usd=1519=2669
emcas_engr_xio=-67=340
emcas_fin_bi=9=333

Antwort1

Ich nehme an, Sie möchten nur Felder ausgeben, deren Schlüssel in beiden Dateien mit beiden Werten vorkommt. Wie inSparhawks Antwort, das richtige Werkzeug dafür ist join. Mit AWK funktioniert Folgendes:

#!/usr/bin/awk -f

BEGIN {
    OFS = FS = "="
}

FNR == NR {
    values[$1] = $2
}

FNR < NR {
    if (values[$1]) {
        print $1, values[$1], $2
    }
}

Dies beginnt mit dem Setzen der Eingabe- und Ausgabefeldtrennzeichen auf „=“, analysiert dann die erste Datei ( FNR == NR) und speichert alle ihre Werte im valuesassoziativen Array. Anschließend analysiert es alle folgenden Dateien ( FNR < NR) und gibt für jede Zeile, sofern in der ersten Datei ein Wert gefunden wurde, den Schlüssel, den gespeicherten Wert und den Wert in der aktuellen Datei aus.

Antwort2

Für diese Aufgabe gibt es ein einfacheres Werkzeug awkals join:

join -t '=' -1 1 -2 1 file1.txt file2.txt

Erläuterung

man joinWeitere Informationen finden Sie unter:

  • -t '='=: als Trennzeichen verwenden
  • -1 1 -2 1: Verknüpfung mit Feld 1 von Datei 1 und Feld 1 von Datei 2
  • file1.txt file2.txt: diese beiden Dateien zusammenfügen.

verwandte Informationen