Суммарное значение рядом с определенным шаблоном

Тип раздела отличается от типа файловой системы. Выберите тип раздела Linux .

ext2 и ext4 - файловые системы. Они определяются форматированием, используемым после создания разделов.

2
15.02.2016, 16:19
4 ответа

Вот грубый способ использования awk:

awk '/^<Overall>/ { 
    sub("<Overall>", ""); 
    sum += $1; 
    lines++; 
  } 
  END { print sum / lines}' 
  tags  ### this is your input file
1
27.01.2020, 21:54

Использование awk (при условии, что все, что находится в общих строках, это это и число)

awk 'x+=sub(/<Overall>/,""){y+=$0}END{print "AVG:",y/x}' file

x увеличивается для каждой успешной подгруппы <Всего> ни с чем. Это означает, что он увеличивается только в строках, содержащих .

Блок после затем добавляет число, оставшееся в строке, к общему количеству.

END выполняется в конце программы.

В конце блока печатается среднее значение.

РЕДАКТИРОВАТЬ: для большого количества файлов

awk 'x+=sub(/<Overall>/,""){y+=$0}END{print FILENAME,"AVG:",y/x}' LISTOFFILES
3
27.01.2020, 21:54

С perl :

perl -lne 'for (/<Overall>([\d.eE+-]+)/g) {$n++; $sum += $1}
           END{print $sum/$n if $n}'

Это дает возможность обрабатывать более одного тега в строке. [\ d.eE + -] + является грубым сопоставлением десятичного числа с плавающей запятой (допускает такие вещи, как 12, 1.2, -1E + 20 (хотя также и вещи, которые не являются действительными числами)).

1
27.01.2020, 21:54

Вот решение, использующее несколько изящных утилит:

grep "^<Overall>\d\+" file | cut -c 10 | paste -s -d + - | bc
  1. Найдите в файле строки, начинающиеся с «», за которыми следует строка цифр ( т.е. число).
  2. Вырежьте число из оставшейся части строки.
  3. Объедините все строки с символом «+» между
  4. Передайте результат в bc , который вычислит сумму
1
27.01.2020, 21:54

Теги

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