
Ich habe eine Datei mit nur zwei Zeilen und der folgenden Struktur:
$ cat /tmp/pwpower.log
000D6F0000D34227, -114.10
000D6F0001A405C4, -130.09
Die Werte sind Leistungswerte meiner Solaranlage. Negative Werte bedeuten Erzeugung.
Ich brauche die Werte, die über grep/sed/awk extrahiert werden – was auch immer der intelligenteste Weg ist. Ich muss beide Werte separat und ohne Minuszeichen extrahieren lassen.
Was ich jetzt mache, ist zwar etwas blöd, aber es funktioniert – viele von euch haben bestimmt cleverere Methoden für mich :-) Dabei sehe ich natürlich nur die Werte plus Minus.
So erhalten Sie den ersten Wert:
cat /tmp/pwpower.log |grep -o "\-.*" | head -n 1
So erhalten Sie den zweiten Wert:
cat /tmp/pwpower.log |grep -o "\-.*" | tail -n1
Und eine damit verbundene Frage: Gibt es eine einfache Möglichkeit, diese STRINGS zu nehmen und so umzuwandeln, dass ich die SUMME berechnen kann?
Antwort1
Alle Werte:
$ awk -F '[ -]*' '$0=$NF' /tmp/pwpower.log
114.10
130.09
Wert in der ersten Zeile:
$ awk -F '[ -]*' 'NR==1{print $NF;exit}' /tmp/pwpower.log
114.10
Wert in der zweiten Zeile:
$ awk -F '[ -]*' 'NR==2{print $NF;exit}' /tmp/pwpower.log
130.09
Summe aller Werte:
$ awk -F '[ -]*' '{sum+=$NF} END{print sum}' /tmp/pwpower.log
244.19
Antwort2
Sie können cut
die zweite Zahlenspalte auswählen und paste -sd+
eine Reihe von Zahlen erstellen, die Sie addieren. bc
Anschließend können Sie mit dem Tool die Berechnung durchführen.
$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19
Wie es funktioniert
Wählt die Zahlen aus der 2. Spalte aus.
$ cut -d',' -f2 pwpower.log
-114.10
-130.09
Formatiert sie in eine einzelne Zeile mit einem +
Zeichen zwischen jeder Zahl neu:
$ cut -d',' -f2 pwpower.log | paste -sd+
-114.10+ -130.09
Führt die Berechnung durch:
$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19
So erhalten Sie den absoluten Wert:
$ cut -d',' -f2 pwpower.log | sed 's/-//g' | paste -sd+ | bc
244.19
Wenn das Format der Datei pwpower.log
gewährleistet ist, können Sie cut
auf das Minuszeichen verzichten:
$ cut -d'-' -f2 pwpower.log | paste -sd+ | bc
244.19
Antwort3
Ein KISS-Ansatz
$ awk '{print -$2; t+=-$2}; END{print t}' pwpower.log
114.1
130.09
244.19
Antwort4
[root@ip-10-186-149-181 ~]# cut -d '-' -f2 /tmp/pwpower.log | paste -sd+ | bc
244.19
Dadurch wird die Berechnung ohne das Minus durchgeführt.
Ich denke, Cut ist im Allgemeinen schneller als Awk