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

Файл PID будет содержать идентификатор Процесса рабочего процесса. Это имеет различное использование; можно считать его и проверить, что процесс все еще работает, и примите соответствующие меры или считайте их и уничтожьте процесс.

Файл блокировки, скорее всего, специализирован. Файлы блокировки используются, чтобы указать, что некоторый ресурс используется и что хотящий получить доступ процесс должен ожидать, пока ресурс не освобожден перед продолжением.

24
21.03.2011, 02:18
5 ответов
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 }'
34
27.01.2020, 19:40
  • 1
    Shawn - спасибо за Ваш ответ. Как я возвращаю общее количество назад сценарию удара из awk? –  Amir Afghani 14.12.2010, 23:28
  • 2
    @Amir Вы использовали бы первый как это variable=$(grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }') Это помещает вывод команды (который является только значением суммы) в названную переменную variable –  Shawn J. Goff 14.12.2010, 23:33
  • 3
    @Amir Вы использовали бы первый как это variable=$(grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }') Это помещает вывод команды (который является только значением суммы) в названную переменную variable ---------121 афганец--------32775----@Amir кроме того, Вы могли бы хотеть изменить свой grep на "[0-9]\+ errors". Это будет соответствовать, если у Вас будет создание отчетов строки> 9 ошибок. –  Shawn J. Goff 14.12.2010, 23:36
  • 4
    Да, ничего себе, я не могу полагать, что пропустил это.Спасибо. –  Amir Afghani 14.12.2010, 23:43
  • 5
    Shawn, вывод кажется, что это не сложение моих результатов. Это похоже на это: Полные погрешности = +259+7581+8852+2014+3189 ++ 13572+11438 +++ 6+4172 + –  Amir Afghani 14.12.2010, 23:58

Это может все быть сделано в awk также:

awk '"[0-9]+ errors" {sum += $1}; END {print sum}' verification_report_3.txt
8
27.01.2020, 19:40

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

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

P.S. Я изменил регулярное выражение (добавил + квантор) позволить числа> 9.

P.S. С другой стороны, awk достаточен (принятие GNU awk):

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

Попытайтесь передать вывод по каналу от своего grep в

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

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

$ 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; }

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

3
27.01.2020, 19:40

Теги

Похожие вопросы