
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 values
assoziativen 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 awk
als join
:
join -t '=' -1 1 -2 1 file1.txt file2.txt
Erläuterung
man join
Weitere 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 2file1.txt file2.txt
: diese beiden Dateien zusammenfügen.