如何使用AWK从sar命令中提取CPU空闲值

时间:2018-06-12 13:07:26

标签: unix awk cpu

sar命令的外部开始,我只想提取%iowait值高于设定阈值的行。 我尝试使用AWK,但不知怎的,我无法执行操作。

sar -u -f sa12 | sed 's/\./,/g' | awk -f" " '{ if ( $7 -gt 0 ) print $0 }'

我尝试将.替换为,并使用-gt,但仍然没有喜悦。 有人可以提出解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果我们需要sar -uiowait > 0.01的整行输出,那么我们就可以使用它,

<强>命令

sar -u | grep -v "CPU" | awk '$7 > 0.01'

输出类似于

03:40:01 AM     all      3.16      0.00      0.05      0.11      0.00     96.68
04:40:01 PM     all      0.19      0.00      0.05      0.02      0.00     99.74

如果希望输出特定字段,只说iowait,我们可以使用下面给出的

指出特定字段,

sar -u | grep -v "CPU" | awk '{if($7 > 0.01 ) print $7}'

输出

0.11
0.02

注意grep -v仅用于删除输出中的标题

希望这有帮助,

答案 1 :(得分:0)

我的sar -u提供了与以下内容类似的几行:

Linux 4.4.0-127-generic (v1)    06/12/2018      _x86_64_        (1 CPU)

12:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:05:01 AM     all      0.29      0.00      0.30      0.01      0.00     99.40
12:15:01 AM     all      0.33      0.00      0.34      0.00      0.00     99.32
12:25:01 AM     all      0.33      0.00      0.30      0.01      0.00     99.36
12:35:01 AM     all      0.31      0.00      0.29      0.01      0.00     99.39
12:45:01 AM     all      0.33      0.00      0.32      0.01      0.00     99.35
12:55:01 AM     all      0.32      0.00      0.30      0.00      0.00     99.38
01:05:01 AM     all      0.32      0.00      0.28      0.00      0.00     99.39
01:15:01 AM     all      0.33      0.00      0.30      0.01      0.00     99.37
01:25:01 AM     all      0.31      0.00      0.30      0.01      0.00     99.39
01:35:01 AM     all      0.31      0.00      0.33      0.00      0.00     99.36
01:45:01 AM     all      0.31      0.00      0.28      0.01      0.00     99.40
01:55:01 AM     all      0.31      0.00      0.30      0.00      0.00     99.38
02:05:01 AM     all      0.31      0.00      0.28      0.01      0.00     99.40
02:15:01 AM     all      0.32      0.00      0.30      0.01      0.00     99.38
02:25:01 AM     all      0.31      0.00      0.30      0.01      0.00     99.38
02:35:01 AM     all      0.33      0.00      0.33      0.00      0.00     99.33
02:45:01 AM     all      0.35      0.00      0.32      0.01      0.00     99.32
02:55:01 AM     all      0.28      0.00      0.30      0.00      0.00     99.42
03:05:01 AM     all      0.32      0.00      0.31      0.00      0.00     99.37
03:15:01 AM     all      0.34      0.00      0.30      0.01      0.00     99.36
03:25:01 AM     all      0.32      0.00      0.29      0.01      0.00     99.38
03:35:01 AM     all      0.33      0.00      0.26      0.00      0.00     99.40
03:45:01 AM     all      0.34      0.00      0.29      0.00      0.00     99.36
03:55:01 AM     all      0.30      0.00      0.28      0.01      0.00     99.41
04:05:01 AM     all      0.32      0.00      0.30      0.01      0.00     99.37
04:15:01 AM     all      0.37      0.00      0.31      0.01      0.00     99.32
04:25:01 AM     all      1.78      2.04      0.59      0.05      0.00     95.55

要过滤掉%iowait大于0.01的那些,我们说sar -u | awk '$7>0.01{print}' Linux 4.4.0-127-generic (v1) 06/12/2018 _x86_64_ (1 CPU) 04:25:01 AM all 1.78 2.04 0.59 0.05 0.00 95.55 05:15:01 AM all 0.34 0.00 0.32 0.02 0.00 99.32 06:35:01 AM all 0.33 0.22 1.23 4.48 0.00 93.74 06:45:01 AM all 0.16 0.00 0.12 0.02 0.00 99.71 10:35:01 AM all 0.22 0.00 0.13 0.02 0.00 99.63 12:15:01 PM all 0.42 0.00 0.16 0.03 0.00 99.40 01:45:01 PM all 0.17 0.00 0.11 0.02 0.00 99.71 04:05:01 PM all 0.15 0.00 0.12 0.03 0.00 99.70 04:15:01 PM all 0.42 0.00 0.23 0.10 0.00 99.25

awk

修改

正如@Ed Morton所正确指出的那样,awk '$7>0.01'代码可以缩短为client max protocol = SMB3 ,因为默认操作是打印当前行。