Добавление чисел из результата grep

Я запускаю следующую команду:

grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}' 

и я получаю следующий результат:

 1 4 0 8 

Я хотел бы добавить каждое из чисел до переменной счетчика. Есть ли волшебный один лайнер, который кто-то может мне помочь?

5 Solutions collect form web for “Добавление чисел из результата grep”

 grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }' 

Это не печатает список, но печатает сумму. Если вы хотите как список, так и сумму, вы можете сделать:

 grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1; print $1} END { print SUM }' 

Все это можно сделать и в awk:

 awk '"[0-9]+ errors" {sum += $1}; END {print sum}' verification_report_3.txt 

Кажется, вы используете GNU- систему, поэтому, если доступна поддержка регулярных выражений Perl , вы можете написать что-то вроде этого:

 grep -Po '[0-9]+(?=\s+errors)' infile | paste -sd+ | bc 

PS Я изменил регулярное выражение (добавленный + квантификатор), чтобы разрешить числа> 9.

PS Альтернативно awk достаточно (при условии GNU awk ):

 awk 'END { print s } /[0-9]+[[:space:]]+errors/ { s += $1 }' infile 

Попробуйте подключить вывод из вашего grep в

 awk 'BEGIN {total=0;}{total+=$1;}END {print "Total: ",total}' 

Я использую это:

 $ echo $(cat file | sed 's/$/+/') 0 | bc 

Это неэффективно для больших списков, но для большинства моих случаев использования это нормально. Обычно я использую функцию оболочки для автоматизации процесса, так что я должен только предоставить имя файла:

 ## cheezy summation ## call from .bashrc ## getsum () { echo $(cat $1 | sed 's/$/+/') 0 | bc; } gethsum () { echo $(cat $1 | sed 's/[gG]/*1000M/' | sed 's/[mM]/*1000K/' | sed 's/[kK]/*1000/' | sed 's/$/+/') 0 | bc; } gethexsum () { echo ibase=16 $(cat $1 | sed 's/$/+/') 0 | bc; } 

Вы всегда можете подставить маркер конца строки для отдельного разделителя элементов или класса символов, если ваши данные разделены другим способом.

  • помощь с truncate \ find
  • Матч RH с grep
  • Насколько дорогостоящим является поиск без учета регистра по сравнению с поиском с учетом регистра?
  • "Grep: Непревзойденная ошибка [" при использовании регулярного выражения
  • Как найти / grep, что находится между строкой1 и строкой2?
  • find + grep для соответствия точных ключевых слов в файле
  • сделать вывод grep без конечной новой строки
  • Самый эффективный метод grep
  • Как я могу использовать grep для поиска нескольких неназванных каталогов?
  • vim: grep, используя опцию bash 'globstar'
  • Почему одно и то же sed regex (после grep) выходит из строя при запуске в сценарии bash или командной строке bash?
  • Linux и Unix - лучшая ОС в мире.