Скользящее среднее значение на файле журнала с awk или другими утилитами Unix?

alias, export, и eval вся часть man builtin на Mac OS X и, я принимаю в других системах BSD.

На OS X страницы справочника для встроенных команд все искажаются к встроенному, поэтому если я ввожу man alias это остановится man builtin. Проблема, хотя это man builtin действительно не предоставляет информацию об отдельных командах. Поэтому для получения информации о псевдониме необходимо использовать help alias.

В то время как я предпочитаю читать страницы справочника из терминальной подсказки при пропавших без вести в системе, я перейду к http://man.cx/, поскольку это довольно всесторонне.

4
13.04.2017, 15:36
2 ответа

Сделайте хвост-F звуковым сигналом однажды для каждой строки:

bel=`echo foo | tr -c -s '\007' '\007'`
tail -F file | sed "s/\$/$bel/"

Что касается использования оболочки для вычислений скользящего среднего значения вот сценарий удара, который отслеживает количество R0 и строк R1 в движущемся окне $windowsize размера. Отслеживающие переменные являются r0sum и r1sum.

windowsize=10
declare -ai isr0line isr1line r0sum r1sum i
for ((i=0; $i<$windowsize;i+=1)) ; do isr0line[$i]=0; isr1line[$i]=0; done
i=0
while read line
do
   r0sum=$(($r0sum - ${isr0line[$i]}))
   r1sum=$(($r1sum - ${isr1line[$i]}))
   case "$line" in
      R0*) isr0line[$i]=1; isr1line[$i]=0; ;;
      R1*) isr1line[$i]=1; isr0line[$i]=0; ;;
        *) isr0line[$i]=0; isr1line[$i]=0; ;;
   esac
   r0sum=$(($r0sum + ${isr0line[$i]}))
   r1sum=$(($r1sum + ${isr1line[$i]}))
   echo "R0 lines $r0sum  R1 lines $r1sum"
   i=$((($i + 1) % $windowsize))
done
2
27.01.2020, 20:54
  • 1
    Какова цель echo и tr в присвоении bel? В Bash (и некоторые другие оболочки) можно сделать bel=$'\007'. Другой метод: bel=$(echo -n '\007') –  Paused until further notice. 18.01.2012, 19:56
  • 2
    . Я обычно пишу для sh, так как это - все, которое было, когда я изучил Unix. Я взял это осуществление для подталкивания меня для изучения еще нескольких функций удара. Я не знал, что оболочка обработала восьмеричные Escape в строках непосредственно теперь. –  Kyle Jones 18.01.2012, 20:29

Пропустите свой журнал через это:

awk '/^R1/ { r1++ } ; /^R0/ { r0++ } ; r0 > 0 {  print r1/r0 }'

Это должно произвести "рабочее отношение" для каждой строки после первого R0.


И это для скользящего отношения (извините об этом, у меня было неверное представление о том, что "отношение" означало):

BEGIN { winsize=10; h=t=r0=r1=0 }
/^R0/ { r0++ }
/^R1/ { r1++ }
      { print r1 ":" r0 ; buf[h++] = $1 }
h - t >= winsize { r = buf[t]; delete buf[t++] }                   
r ~ /R1/ { r1-- }
r ~ /R0/ { r0-- }

Переменная winsize содержит размер окна. regexes являются лишними здесь, но они сохраняют нажатия клавиш. Тесты, возможно, были $1 == "R0" и r == "R0".

3
27.01.2020, 20:54
  • 1
    Но это не движущееся отношение. –  Paused until further notice. 18.01.2012, 19:47
  • 2
    @DennisWilliamson: Да, по некоторым причинам я думал, что "отношение" означало "частное", и "скользящее частное", конечно, не имеет смысла, таким образом, я стремился к следующей лучшей вещи. Я теперь вижу, что отношение может быть выражено как m:n; я обновил свой ответ. привычка –  angus 18.01.2012, 20:27
  • 3
    == частное, от Wiktionary: "(арифметика) относительные величины двух количеств (обычно выражаемый как частное)". –  Paused until further notice. 18.01.2012, 22:25
  • 4
    OK, затем я был прав. В этом случае сценарий просто показывает, сколько R0 и R1 было в последних 10 строках. Возможно, это - то, что хотел OP. Отношение очевидно невозможно вычислить, когда одно из количеств 0, который должен происходить довольно часто в окне n-строки. –  angus 18.01.2012, 23:26

Теги

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