Печать от массивов по сравнению с awk 'НОМЕР

Я в настоящее время распечатываю значения от vmstat стресс-тестов с помощью этого:

  vmstat -a $INT $CNT | awk 'NR > 1 {print $13,$14,$15}'> vm.log_$D & sleep 5 && stress --vm $cores -t $seconds_to_run 

Я думаю, что это могло бы быть более опрятно для распечатывания их в массивах, но когда я делаю, я всегда получаю синтаксическую ошибку {пропавшие без вести, даже когда нет. Как я могу преобразовать это для печати значений столбца 13$, 14$, 15$ посредством использования массивов, а не пути выше?

Вывод обоих должен быть тем же, но я чувствую, что массивы выглядят более опрятными с точки зрения вывода.

iostat производится

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          17.74    1.77   31.43   25.05    0.00   24.02

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              51.97      1349.36        32.86     392947       9568

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.18   78.57   12.24    0.00    0.00    0.00

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               2.04        12.24         0.00         12          0

Я хотел бы за то, когда я выполняю его, чтобы только столбцы процента были распечатаны, не чтения Кбита.

РЕДАКТИРОВАНИЕ **********************************

SAR-D вывод-I хотел бы, чтобы подходящая команда работала вместе с напряжением - HDD, но это - вывод, который дает sar-D 1 10.

    4296roryhbmc
    1944    rootal,
    3361    root
Tasks:     326total,
Cpu(s):25.7%us,54.1%sy,
Mem:2041916k
Swap:1046524kt    0 |   0     0 |   0     0 | 268   957 
 34  17  49   0   0   0|   0     0 |   0     0 |   0     0 | 279   679 
 49  31  21   0   0   0|   0     0 |   0     0 |   0     0 | 334  1874 
  4   6  90   0   0   0|   0     0 |   0     0 |   0     0 | 109   131 
 28  16  55   1   0   0|   0  4096B|   0     0 |   0     0 | 304   575 
 42  33  26   0   0   0|  20k  428k|   0     0 |   0     0 | 392  1343 
  4  10  86   0   0   0|   0     0 |   0     0 |   0     0 |  81   124 
  8  12  57  22   0   0|   0     0 |   0     0 |   0     0 | 113   193 
  2   9  66  22   0   0|   0     0 |   0     0 |   0     0 |  74   126 
  4  12  84   0   0   0|   0     0 |   0     0 |   0     0 |  92   140 
  8  21  54  17   0   0|   0     0 |   0     0 |   0     0 | 129   286 
  7  11  48  33   0  
*******************************
* Choose from the following: *
*******************************
* [1] Stress the CPU. *
* [2] Stress the Memory(RAM). *
* [3] Stress the disk drive. *
* [4] Stress the  hard disk drive. *
Press A to quit.
************************
Enter your menu choice [1-4]: 

Как я могу отредактировать его так, это только покажет это?

$ sar -d

SunOS unknown 5.10 Generic_118822-23 sun4u    01/22/2006

00:00:01   device       %busy   avque   r+w/s  blks/s  avwait  avserv
. cut ...
14:00:02   dad0             31     0.6      78   16102     1.9     5.3
           dad0,c            0     0.0       0       0     0.0     0.0
           dad0,h           31     0.6      78   16102     1.9     5.3
           dad1              0     0.0       0       1     1.6     1.3
           dad1,a            0     0.0       0       1     1.6     1.3
           dad1,b            0     0.0       0       0     0.0     0.0
           dad1,c            0     0.0       0       0     0.0     0.0

источник: http://www.ibm.com/developerworks/aix/library/au-unix-perfmonsar.html

0
задан 3 March 2015 в 16:15

1 ответ

Это действительно не имеет никакого отношения, хранятся ли данные в awk использование массива или нет.

Как упомянуто @muru, можно переформатировать данные в столбцы с помощью column команда

awk 'NR > 1 {print $13,$14,$15}' | column -t

С другой стороны, просто собственный выходной разделитель полей awk набора к ВКЛАДКЕ вместо пространства непосредственно

awk 'NR > 1 {OFS="\t"; print $13,$14,$15}'

Для более сложных требований форматирования Вы могли заменить print оператор a printf, который позволил бы Вам указывать ширину поля явно, например.

awk 'NR > 1 {printf "%4s%8s%8s\n",$13,$14,$15}'

Для Вашего iostat требование, первая вещь отметить состоит в том, что можно ограничить iostatвывод только к Отчету о загрузке ЦП (опускающий Отчет об Использовании Устройства) путем добавления -c переключатель командной строки, например.

 iostat -c 1 10

Кроме того, если Вы хотите пропустить повторный пробел и строки заголовка, Вы могли бы сделать что-то как

iostat -c 1 5 | awk '/^$/ || /^avg-cpu:/ {next}; {print}'
Linux 3.13.0-45-generic (T61p)  15-03-02    _x86_64_    (2 CPU)
          11.11    0.04    2.67    0.14    0.00   86.04
           2.53    0.00    1.01    0.00    0.00   96.46
           4.46    0.00    1.49    0.00    0.00   94.06
           2.99    0.00    1.00    0.50    0.00   95.52
           3.02    0.00    0.50    0.00    0.00   96.48

или Вы могли сделать что-то более необычное для печати только первого % заголовок:

$ iostat -c 1 5 | awk '/^$/ || (/^avg-cpu:/ && a) {next}; NR>1 {a=1;print}'
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.11    0.04    2.67    0.14    0.00   86.04
           2.02    0.00    0.51    0.00    0.00   97.47
           4.04    0.00    0.51    0.00    0.00   95.45
           2.50    0.00    1.00    0.00    0.00   96.50
           3.02    0.00    1.01    0.00    0.00   95.98
4
ответ дан 3 August 2019 в 14:08

Другие вопросы по тегам:

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