Ich führe den folgenden Befehl aus:
grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}'
und ich bekomme folgendes Ergebnis:
1
4
0
8
Ich möchte jede der Zahlen zu einer laufenden Zählvariablen hinzufügen. Gibt es einen magischen One Liner, bei dessen Bau mir jemand helfen kann?
variable=$(grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }')
die Ausgabe des Befehls Dies stellt (die nur der Summenwert) in die Variable genanntvariable
"[0-9]\+ errors"
. Dies stimmt überein, wenn Sie eine Zeile mit mehr als 9 Fehlern haben.Dies kann alles auch in awk gemacht werden:
quelle
Sie scheinen ein GNU- System zu verwenden. Wenn also Unterstützung für reguläre Ausdrücke in Perl verfügbar ist, können Sie Folgendes schreiben:
PS: Ich habe den regulären Ausdruck geändert (+ hinzugefügt), um Zahlen> 9 zuzulassen.
PS Alternativ ist awk ausreichend (vorausgesetzt, GNU awk ):
quelle
Versuchen Sie, die Ausgabe von Ihrem grep in zu leiten
quelle
Ich benutze das:
Es ist nicht effizient für große Listen, aber für die meisten meiner Anwendungsfälle ist es in Ordnung. Normalerweise benutze ich eine Shell-Funktion, um den Prozess zu automatisieren, sodass ich nur einen Dateinamen angeben muss:
Sie können die Zeilenende-Markierung immer durch ein bestimmtes Elementtrennzeichen oder eine bestimmte Zeichenklasse ersetzen, wenn Ihre Daten auf andere Weise abgegrenzt sind.
quelle