
Ich habe zwei Dateien wie unten: file1.txt
a 2019 15
b 2019 20
Datei2.txt
a 2020 10
b 2019 15
Gewünschter Ausgabeinhalt von Datei1.txt und Differenz zwischen den dritten Spalten (aus Datei1 und Datei2) in Bezug auf die erste Spalte aus Datei 1)
a 2019 5
b 2019 5
Antwort1
Hier ist ein Einzeiler dazu.
join file1.txt file2.txt | awk '{print $1,$2,$3-$5}'
Der join
Befehl fügt zunächst die relevanten Werte in derselben Zeile zusammen, und zwar wie folgt:
[gnubeard@mothership: ~/diffy]$ join file{1,2}.txt
a 2019 15 2020 10
b 2019 20 2019 15
Dann awk
druckt es die erste Spalte ( $1
, zB a
), die zweite Spalte ( $2
, zB 2019
) und den Wert der dritten Spalte abzüglich des Werts in der fünften Spalte ( $3-$5
, zB 15 - 10
).
Das Ergebnis scheint mit der gewünschten Ausgabe übereinzustimmen:
[gnubeard@mothership: ~/diffy]$ join file{1,2}.txt | awk '{print $1,$2,$3-$5}'
a 2019 5
b 2019 5