【问题标题】:Bash - delimeter to cut field differing spacingBash - 分割字段不同间距的分隔符
【发布时间】:2020-07-24 12:12:40
【问题描述】:

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

【问题讨论】:

    标签: bash pipe cut iostat


    【解决方案1】:

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

    iostat -c | awk 'NR==3{print $1,$2,$4,$7};NR==4{print $1,$3,$6}'
    

    【讨论】:

      【解决方案2】:

      您可以在 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}'
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2020-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-23
          • 2013-05-03
          相关资源
          最近更新 更多