Was bedeutet "o"?

1

Anzeige der am Terminal verbrauchten CPU in% Die Frage wird während der Erstellung eines Bash-Skripts nicht verstanden.

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}'

Was heißt o2wie o2, o4, o5? ist dumme Frage?

DavidPostill
quelle

Antworten:

2

Sie sind Variablen im awkSkript ... Diese Formatierung könnte es klarer machen:

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
    }'

Sie nehmen jede Zeile, in der "cpu" enthalten ist, von /proc/stat:

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

Tun Sie dies alle 5 Sekunden:

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

Und leiten die Ausgabe in awk. awknehmen 2 Felder, 4 und 5 ( $2, $4und $5) , um eine Berechnung zu tun, und sie in Variablen zu speichern o2, o4und o5.

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

Weitere Informationen finden Sie auf /proc/statder Manpage hier .

/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.

                     [...]
Attie
quelle
1

Die o2, o4 und o5 bedeuten nichts. Sie sehen so aus, als wären sie Variablen, aber die Variablen werden nach der Berechnung festgelegt. Wenn Sie eine Variable verwenden möchten, müssen Sie sie festlegen, bevor Sie sie verwenden.

Hier ist eine einfachere Berechnung, um das Problem zu veranschaulichen. Ich möchte zwei Zahlen hinzufügen.

$ 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 verwendet 0, um den nicht gesetzten Wert in der Berechnung darzustellen.

Bei der CPU-Berechnung wird im Wesentlichen Folgendes ausgeführt:

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

Sie erhalten eine negative Zahl geteilt durch eine negative Zahl, was eine positive Zahl ergibt.

In diesem Fall hätte Folgendes gereicht:

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