Rest der Zeile durchsuchen...nach Übereinstimmung

Rest der Zeile durchsuchen...nach Übereinstimmung

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 cutdie zweite Zahlenspalte auswählen und paste -sd+eine Reihe von Zahlen erstellen, die Sie addieren. bcAnschließ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.loggewährleistet ist, können Sie cutauf 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

verwandte Informationen