iostat可以显示永久设备名称(带有-j id),而不是内核设备名称(例如sda),但这也意味着选项-h用于“人类可读”输出。
这将导致这样的输出(一行包含永久磁盘名称,例如HOMES或DATADISK,下一行包含该磁盘的值)。

(在我的示例中,我将iostat的输出通过管道传递到awk'// {print strftime(“%Y-%m-%d%H:%M:%S”),$ 0}',以在每行):

2018-06-13 11:57:03 HOMES
2018-06-13 11:57:03                   0.00     0.00    0.00    0.50     0.00     2.00     8.00     0.00    1.00    0.00    1.00   1.00   0.05
2018-06-13 11:57:03 ARCHIVEDISK
2018-06-13 11:57:03                   0.00     0.00    0.00    0.50     0.00     2.00     8.00     0.00    0.00    0.00    0.00   0.00   0.00
2018-06-13 11:57:03 DATADISK
2018-06-13 11:57:03                   0.00     0.00   86.00    0.50   680.00     2.00    15.77     0.12    1.40    1.41    1.00   1.26  10.90
2018-06-13 11:57:05 HOMES
2018-06-13 11:57:05                   0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
2018-06-13 11:57:05 ARCHIVEDISK
2018-06-13 11:57:05                   0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
2018-06-13 11:57:05 DATADISK
2018-06-13 11:57:05                   0.00     0.00  122.00  116.00   976.00  1164.00    17.98     0.56    2.33    3.36    1.26   1.47  34.90


如何合并行,以便得到此信息:

2018-06-13 11:57:03 HOMES             0.00     0.00    0.00    0.50     0.00     2.00     8.00     0.00    1.00    0.00    1.00   1.00   0.05
2018-06-13 11:57:03 ARCHIVEDISK       0.00     0.00    0.00    0.50     0.00     2.00     8.00     0.00    0.00    0.00    0.00   0.00   0.00
2018-06-13 11:57:03 DATADISK          0.00     0.00   86.00    0.50   680.00     2.00    15.77     0.12    1.40    1.41    1.00   1.26  10.90
2018-06-13 11:57:05 HOMES             0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
2018-06-13 11:57:05 ARCHIVEDISK       0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
2018-06-13 11:57:05 DATADISK          0.00     0.00  122.00  116.00   976.00  1164.00    17.98     0.56    2.33    3.36    1.26   1.47  34.90

最佳答案

使用awk:

awk 'NF==3{n=$3;next}{for(i=NF;i>2;i--) $(i+1)=$i;$3=n}1' file | column -t


如果该行包含3个元素,则awk脚本将获取名称。
对于所有其他行,它会将所有元素移动一个位置,但前两个除外。
最后一行被打印出来。

命令column正在重新格式化以按列显示。

关于linux - 将第n + 1行的列合并到第n行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50835766/

10-11 03:24