Расчет удельного среднего значения

...и, возможно, вы могли бы получить эти части глифов с помощью

мертвые клавиши

вариант? Если это вариант? Если вы переключитесь на этот вариант, если он существует?

Лучше бы с помощью setxkbmapили localectlполучить информацию о планировках, вариантах и ​​опциях.

Файлы XKB находятся в /usr/share/X11/xkb/. Посмотрите каталог «rules», чтобы увидеть/найти свой parts.

-1
08.04.2021, 17:31
5 ответов

команда

Максимальное значение:

 awk '{for(i=1;i<=NF;i++){if($i ~ /ms/){print $(i-1)}}}' filename| awk 'NR==1{sum=$1}($1 > sum){sum=$1}END {print sum}'

выход

1050

Минимальное значение:

awk '{for(i=1;i<=NF;i++){if($i ~ /ms/){print $(i-1)}}}' filename| awk 'NR==1{sum=$1}($1 < sum){sum=$1}END {print sum}'

выход

2
-1
28.04.2021, 22:53

Использование GNU awk дляFPAT("Регулярного выражения (в виде строки ), которая указывает gawk создавать поля на основе текста, который соответствует регулярному выражению. "):

awk -v FPAT='Time:[[:blank:][:digit:]]+ms' '
          { split($1, tmp); sum+=tmp[2] }
NR==1     { min=max=tmp[2] }
min>tmp[2]{ min=tmp[2] }
max<tmp[2]{ max=tmp[2] }

END{ print min, max, sum/NR }' infile

Выход;

2 1050 384
7
28.04.2021, 22:53

Один из способов сделать это — перебрать все поля в каждой строке, получить номер поля «мс» и вычесть единицу из этого номера поля, что даст вам номер поля вашего номера. Пока число всегда является полем перед ms, что, как я думаю, вы сказали, тогда это будет работать.

Вот пример печати каждого числа.awk '{for(i-1;i<=NF;++i){if($i == "ms"){print $(i-1)}}}' filename

Если вы хотите получить минимальное, максимальное и среднее число, вам придется сделать еще кое-что.

awk '
{for(i=1;i<=NF;++i){
  if($i == "ms")
    {
     if(NR == 1)
      {min=max=$(i-1)};
     if($(i-1) > max)
      {max=$(i-1)};
     if($(i-1)<min)
      {min=$(i-1)};
     sum=sum+$(i-1);
     count+=1;
    }
  }
}
END{
  average=sum/count;
  print "min: "min;
  print "max: "max;
  print "sum: "sum;
  print "average: "average;
}

Выход:

min: 2
max: 1050
sum: 1152
average: 384
1
28.04.2021, 22:53

С помощью awk мы сначала извлекаем количество миллисекунд из каждой записи, в числовое и обновить текущую сумму.

awk '
  p=match($0, /Time: [0-9]+ ms/){
    sum += ms = substr($0,p+6,RLENGTH-9)+0
  }
  ms>max{max=ms}
  min==""||ms<min{min=ms}
  END{print min, max, sum/NR}
' file

Выход

2 1050 384
0
28.04.2021, 22:53

Другой подход к вычислению статистики за время показан с использованием утилиты настольного калькулятора dc и команды GNU grep с режимом PCRE для передачи миллисекунд в dc в своем основном стеке, который затем вычисляет минимум, максимум номеров стеков, а также их сумма.

if=logfile
ms=$(grep -oP 'Time:\s\K\d+(?=\sms)' < "$if")
dc <<eof
2k $ms
[sM0]sa [sm0]sb
[ddlM<a s0 ddlm>b s0 ls+ss z0<c]sc
[lmn32an lMn32an lsln/n10an]sp
zsn dd sm sM ss z0<c lpx
eof

Выход:

2 1050 384.00

Мы используем соответствие -оценке временного кода (?{code}), так как все строки содержат указанное регулярное выражение, для вычисления статистики (мин/макс/сумма )внутри самого регулярного выражения. И, наконец, в eof выведите статистику.

perl -lne '$,=" ";
  m{Time:\h(\d+)\hms(?{
    $1>($M//=$1) and $M=$1;
    $1<($m//=$1) and $m=$1;
    $s += $1})}}{print $m, $M, $s/$.
' logfile

Выход

2 1050 384
0
28.04.2021, 22:53

Теги

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