0

我在 bash 文件中剪切 CPU 使用率统计数据并将其格式化,从 iostat 有多个字段但只有用户、系统和空闲是相关的

如下图所示:

echo "" `iostat -c | awk 'NR==3' | cut -d '%' -f 1,2,4,7`
echo "" `iostat -c | awk 'NR==4' | cut -d '   ' -f 1,2,4,7`

当前输出如下:

 avg-cpu: %user %system %idle
cut: the delimiter must be a single character
Try 'cut --help' for more information.

当我使用它来剪切字段时,它不适用于下一行,因为字段内的间距不同,你如何解释这一点,因为它在剪切分隔符时只允许单个字符?

这是在没有格式化的情况下定期执行时的命令外观:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.01    0.14    0.04    0.00   99.74
4

3 回答 3

3

你不需要写两次,你只需要一个awk:

iostat -c | awk 'NR==3{print $1,$2,$4,$7};NR==4{print $1,$3,$6}'
于 2020-04-11T19:54:33.080 回答
0

您可以在 awk 中使用 printf 格式化输出并打印感兴趣的字段:

 iostat -c | awk '/avg-cpu/{printf "%8s %8s %8s %8s\n", $1, $2, $4, $7; getline; printf "         %8s %8s %8s\n", $1, $3, $6}'
于 2020-04-11T20:01:06.243 回答
0

该命令的-d参数cut接受' '一个或多个空格的分隔符。您可以删除前导空格,例如,使用this。以下命令为您0.07 0.14 99.74提供输出:

echo "" `iostat -c | awk 'NR==4' | awk '{$1=$1};1' | cut -d' ' -f1,3,6`
于 2020-04-11T20:12:18.310 回答