1

Отображение количества процессора, используемого на терминале в% Question, не понимается в процессе создания bash-скрипта.

for x in $(seq 1 11);do sleep 5;grep -w cpu /proc/stat ; done | awk '{
    print (o2+o4-$2-$4)*100/(o2+o4+o5-$2-$4-$5) "%"
    o2=$2;o4=$4;o5=$5}'

Что означает o2 как o2, o4, o5 ? Вопрос глупый?

2 ответа2

2

О2, о4 и о5 ничего не значат. Похоже, они должны быть переменными, но переменные устанавливаются после расчета. Если вы хотите использовать переменную, вы должны установить ее, прежде чем использовать.

Вот более простой расчет, чтобы проиллюстрировать проблему. Я хочу добавить два номера.

$ echo 6 4 | awk '{ print $1 + $2 }'
10

$ echo 6 4 | awk '{
  print o1 + o2    # print the sum of two numbers using unset variables
  print o1, o2     # print the unset variables
  o1=$1            # set the variables
  o2=$2
  print o1, o2     # print the set variables
  }'
0

6 4

awk решает использовать 0 для представления неустановленного значения в расчете.

Глядя на вычисление процессора, он, по сути, делает следующее:

(0 + 0 - x - y) * 100 / (0 + 0 - x - y - z)

В итоге вы получите отрицательное число, разделенное на отрицательное число, в результате получится положительное число.

В этом случае было бы достаточно следующего:

$ grep -w cpu /proc/stat | awk '{ print ($2+$4)*100/($2+$4+$5) "%" }'
2

Они переменные в скрипте awk ... Это форматирование может сделать это более понятным:

for x in $(seq 1 11); do
  sleep 5
  grep -w cpu /proc/stat
done | \
  awk '
    {
      print (o2 + o4 - $2 - $4) * 100 / (o2 + o4 + o5 - $2 - $4 - $5) "%"
      o2=$2
      o4=$4
      o5=$5
    }'

Вы берете любую строку, в которой есть "cpu", из /proc/stat:

$ grep -w cpu /proc/stat
cpu  737017 2198 503480 221363877 201487 97326 0 0 0 0

Делать это каждые 5 секунд:

for x in $(seq 1 11); do
  sleep 5
  grep -w cpu /proc/stat
done

И отправлять вывод в awk . awk берет поля 2, 4 и 5 ($2 , $4 и $5), выполняет вычисления и сохраняет их в переменных o2 , o4 и o5 .

awk '
    {
      print (o2 + o4 - $2 - $4) * 100 / (o2 + o4 + o5 - $2 - $4 - $5) "%"
      o2=$2
      o4=$4
      o5=$5
    }'

Вы можете узнать больше информации о /proc/stat на странице руководства, здесь.

/proc/stat
              kernel/system statistics.  Varies with architecture.  Common
              entries include:

              cpu  3357 0 4313 1362393
                     The amount of time, measured in units of USER_HZ
                     (1/100ths of a second on most architectures, use
                     sysconf(_SC_CLK_TCK) to obtain the right value), that
                     the system spent in various states:

                     [...]

                     nice   (2) Time spent in user mode with low priority
                            (nice).

                     [...]

                     idle   (4) Time spent in the idle task.  This value
                            should be USER_HZ times the second entry in the
                            /proc/uptime pseudo-file.

                     iowait (since Linux 2.5.41)
                            (5) Time waiting for I/O to complete.

                     [...]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .