Awk не работает во второй части или вспомогательном сюжете команды gnuplot - PullRequest
2 голосов
/ 30 апреля 2020

Через gnuplot я пытаюсь напечатать среднюю линию на графике, но она не работает, если я использую команду awk во второй части или команду второго вспомогательного графика, например

plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
     "<awk '{sum += $2} END {print sum/NR}' iops.1.log" with lines title "avg iops"

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

plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
     4590 with lines title "avg iops"

В строке выше напечатана строка скользящего среднего на графике, используя только одно значение (4590) во втором подпункте

Что именно происходит и почему не должно работать?

Ответы [ 3 ]

2 голосов
/ 30 апреля 2020

Возможно, это ошибка, но, к счастью, вы можете вычислить среднее значение y в gnuplot без необходимости awk:

stats "iops.1.log" nooutput
ave=STATS_sum_y/STATS_records
plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
 ave with lines title "avg iops"
1 голос
/ 30 апреля 2020

Конструкция "<..." дает файл по каналу. Чтобы рассчитать и построить среднее значение, вы можете использовать обратные тики:

plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
    `awk '{sum += $2} END {print sum/NR}' iops.1.log` with lines title "avg iops"
1 голос
/ 30 апреля 2020

При построении с помощью plot "<awk ..." и команде awk возвращается одно число, вы фактически получаете файл данных с одним числом. В отличие от этого, при вызове plot 4560 отображается функция , которая затем выводится на график во всем диапазоне х.

Если вы хотите придерживаться awk или просто в качестве объяснения из альтернативы можно сделать

avg = system("<awk '{sum += $2} END {print sum/NR}' iops.1.log")
plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
     int(avg) with lines title "avg iops"
...