gpt4 book ai didi

linux - 逐 block 处理日志,每个 block 包含多行

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:08 28 4
gpt4 key购买 nike

我在做一些后台工作时尝试收集所有系统统计数据。例如,我使用以下命令来收集 IO 统计信息:

iostat -xty 5

此脚本用于每 5 秒收集一次 I/O 统计信息。所以我的日志会包含很多数据 block 。这是我得到 2 个 block 的示例日志:

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 来解析日志并再次重新格式化,然后绘制它们。对于每个 block ,我想获取 DateTime 字符串和字段 wkB/s,然后合并成一行:

07/09/19 17:37:21,7676.00
07/09/19 17:37:26,9920.00
...

我使用 awk 的困难在于:awk 命令处理日志的每一行。但在我的示例中,我需要识别一个 block 。然后在这个 block 中,我需要从多行中提取一些数据,然后合并到 1 行。

请告诉我一个想法。

最佳答案

寻找每个 block 中唯一的字符串。
使用您的示例中给出的输出,以下应该有效:

iostat -xty 5 |
awk '/^[0-9]{2}\/[0-9]{2}\/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/ {t=$0}
/^sdb/ { print t "," $7}'

关于linux - 逐 block 处理日志,每个 block 包含多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56991348/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com