Uruchomię następujące polecenie:
grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}'
i otrzymuję następujący wynik:
1
4
0
8
Chciałbym dodać każdą z liczb do zmiennej zmiennej zliczającej. Czy istnieje magiczny liniowiec, który ktoś może mi pomóc zbudować?
variable=$(grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }')
To wstawia wynik polecenia (który jest tylko wartością sumaryczną) do zmiennej o nazwievariable
"[0-9]\+ errors"
. Będzie to pasować, jeśli masz raportowanie liniowe> 9 błędów.Wszystko to można również zrobić w awk:
źródło
Wygląda na to, że używasz systemu GNU , więc jeśli dostępna jest obsługa wyrażeń regularnych Perla , możesz napisać coś takiego:
PS Zmodyfikowałem wyrażenie regularne (dodałem + kwantyfikator), aby pozwolić na liczby> 9.
PS Alternatywnie wystarczy awk (przy założeniu GNU awk ):
źródło
Spróbuj przesłać dane wyjściowe z grep do
źródło
Używam tego:
Nie jest skuteczny w przypadku dużych list, ale w większości moich przypadków użycia jest w porządku. Zwykle używam funkcji powłoki do automatyzacji procesu, tak że muszę tylko podać nazwę pliku:
Zawsze możesz zastąpić znacznik końca wiersza określonym separatorem elementów lub klasą znaków, jeśli dane są rozdzielane w inny sposób.
źródło