Ich habe eine Datei mit nur zwei Zeilen mit der folgenden Struktur:
$ cat /tmp/pwpower.log
000D6F0000D34227, -114.10
000D6F0001A405C4, -130.09
Die Werte sind Leistungswerte meiner Solaranlage. Negativer Wert bedeutet Erzeugung.
Ich würde die über grep / sed / awk extrahierten Werte benötigen - was auch immer der klügste Weg ist. Ich muss beide Werte separat und ohne Minuszeichen extrahieren lassen.
Was ich jetzt mache, ist irgendwie dumm, aber es funktioniert - ich bin sicher, dass viele von euch klügere Wege für mich haben werden :-) Hier 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 die verwandte Frage: Gibt es eine einfache Möglichkeit, diese STRINGs zu nehmen und zu transformieren, damit ich die SUMME berechnen kann?
quelle
-F-
wird es tun.tr -d "- "
zuerst durchlaufen .-F-
.Sie können
cut
die zweite Zahlenspalte auswählen undpaste -sd+
eine Reihe von Zahlen erstellen, die zusammenaddiert werden sollen. Das Toolbc
kann dann zur Berechnung verwendet werden.Wie es funktioniert
Wählt die Zahlen aus der 2. Spalte aus.
Formatiert sie in eine einzelne Zeile mit einem
+
Vorzeichen zwischen jeder Nummer neu:Führt die Berechnung durch:
Um den absoluten Wert zu erhalten:
Wenn das Format der Datei
pwpower.log
garantiert ist, können Siecut
das Minuszeichen weglassen:quelle
Ein KISS-Ansatz
quelle
Ich mag Ihren Befehl grep, aber es könnte verbessert werden, das Minuszeichen zu entfernen und in Fällen zu arbeiten, in denen es kein Minuszeichen gibt. Erweiterte reguläre Ausdrücke, die in GNU grep mit dem
-E
Flag verfügbar sind, ermöglichen es uns, eine Zahl genauer zuzuordnen.Es ist etwas effizienter, cat nicht zu verwenden, sondern den Dateinamen als Argument an den ersten Befehl zu übergeben und die Datei lesen zu lassen. Mir fällt auch ein, dass es sinnvoller ist, zuerst die Befehle
head
oder zu verwenden, wenn Sie nur die ersten oder letzten Zeilen aus der Dateitail
bearbeiten, damit Sie nur mit einer Zeile übereinstimmen müssengrep
.Erster Wert:
Letzter Wert:
Summe (mit awk Befehl von hier ):
quelle
Dadurch wird die Berechnung ohne Minus durchgeführt.
Ich denke, Schnitt ist im Allgemeinen schneller als awk
quelle
awk
ist das richtige Werkzeug, aber die Zahl wahrscheinlich kann positiv sein (oder?), was bedeutet , dass Sie nicht auf das Minuszeichen als Feldtrennzeichen verwenden möchten. Verwenden Sie stattdessen das Komma als Feldtrennzeichen und negieren Sie dann jeden Wert numerisch.awk
Dadurch werden Zeichenfolgen automatisch in Zahlen umgewandelt:Wenn es positive Zahlen gibt, werden sie negativ. Wenn Sie nur die Summe wollen,
awk
können Sie das auch tun:quelle
sqrt($2^2)
als Trick verwenden, um den absoluten Wert zu erhalten.Um die beiden Werte zu summieren:
quelle
awk
?bc
=)awk
?echo $(cut -d- -f2 file | tr '\n' '+')0 | bc
cut
? Verwenden Sie[insert_cmd_here]
stattdessen eine Subshell-Schleife, erfinden Sie neue Mathematik, verwenden Sie einen menschlichen Cluster oder eine mentale Arithmetik und leiten Sie meine Gedanken einbc
. Warum machen wir Dinge? Kein Grund, meine Antwort schlecht zu machen.Sie können sed auch verwenden
quelle