Я пытаюсь собрать все системные статистические данные при выполнении некоторых фоновых заданий. Например, я использую следующую команду для сбора статистики ввода-вывода:
iostat -xty 5
Этот скрипт используется для сбора статистики ввода-вывода каждые 5 секунд. Так что мой журнал будет содержать много блоков данных. Вот пример журнала, который я получаю 2 блока:
Linux 3.10.0-957.21.3.el7.x86_64 (dp-sim-rockdb-1) 07/09/19 _x86_64_ (8 CPU)
07/09/19 17:37:21
avg-cpu: %user %nice %system %iowait %steal %idle
75.97 0.00 21.65 0.00 0.00 2.38
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 1.00 0.00 4.00 8.00 0.00 1.00 0.00 1.00 1.00 0.10
sdb 0.00 7.00 27.00 39.00 108.00 7676.00 235.88 0.47 7.14 2.07 10.64 0.56 3.70
Linux 3.10.0-957.21.3.el7.x86_64 (dp-sim-rockdb-1) 07/09/19 _x86_64_ (8 CPU)
07/09/19 17:37:26
avg-cpu: %user %nice %system %iowait %steal %idle
73.78 0.00 23.97 0.12 0.00 2.12
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 11.00 1.00 328.00 4.00 55.33 0.56 50.17 54.64 1.00 8.67 10.40
sdb 0.00 10.00 0.00 42.00 0.00 9920.00 472.38 0.34 8.05 0.00 8.05 0.33 1.40
Я часто использую awk для синтаксического анализа журналов и переформатирования, а затем для их построения. Для каждого блока я хочу получить строку DateTime и поле wkB / s, а затем объединить в одну строку:
07/09/19 17:37:21,7676.00
07/09/19 17:37:26,9920.00
...
Трудно при использовании awk: команда awk обрабатывает каждую строку журнала. Но в моем примере мне нужно распознать блок. И затем в этом блоке мне нужно несколько данных из нескольких строк, а затем объединить в 1 строку.
Пожалуйста, подскажите мне идею сделать это.