Bash - 分割字段不同间距的分隔符

Bash - delimeter to cut field differing spacing

我正在 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

不需要写两遍,只需要一个awk:

iostat -c | awk 'NR==3{print ,,,};NR==4{print ,,}'

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

 iostat -c | awk '/avg-cpu/{printf "%8s %8s %8s %8s\n", , , , ; getline; printf "         %8s %8s %8s\n", , , }'

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

echo "" `iostat -c | awk 'NR==4' | awk '{=};1' | cut -d' ' -f1,3,6`