【发布时间】:2015-02-16 19:30:07
【问题描述】:
我创建了一个脚本,它会自动登录到路由器并检查当前的 CPU 负载,如果负载超过某个阈值,我需要它将当前 CPU 值打印到标准输出。
我想在脚本 o/p 中搜索某个模式(在这种情况下为值 80,这是高 CPU 负载的阈值),然后对于该模式的每个实例,它将检查当前值是否大于80 与否,如果为 true,则在模式前打印 5 行,然后是模式的当前行。
问题1:如何遍历模式的每个实例并分别在每个实例上应用一些代码?
问题2:如何在模式前打印n行,在模式后打印x行?
例如。我使用 awk 搜索模式“健康”并在其后打印 6 行,如下所示:
awk '/health/{x=NR+6}(NR<=x){print}' ./logs/CpuCheck.log
我想对模式“80”做同样的事情,这次在它之前打印 5 行,在它之后打印 1 行....仅当 $3(表示当前 CPU 负载)超过值 80 时
下面是自动登录脚本的输出(文件名:CpuCheck.log)
ABCD-> show health xxxxxxxxxx
* - current value exceeds threshold
1 Min 1 Hr 1 Hr
Cpu Limit Curr Avg Avg Max
-----------------+-------+------+------+-----+----
01 80 39 36 36 47
WXYZ-> show health xxxxxxxxxx
* - current value exceeds threshold
1 Min 1 Hr 1 Hr
Cpu Limit Curr Avg Avg Max
-----------------+-------+------+------+-----+----
01 80 29 31 31 43
提前感谢您的帮助
【问题讨论】:
-
awk 当然可以。另一种方法是使用
grep,-A标志控制将显示匹配之后的行数和-B之前的行数。 -
在 awk 中最简单的方法是读取文件两次。在第一个循环中设置标记,然后在第二个循环中的标记之间打印