linux - 使用 awk 在不添加新行的情况下将时间添加到 .plot 文件中

标签 linux bash shell awk

我正在编写一个 shell 脚本,该脚本运行命令 mpstat 和 iostat 以获取 CPU 和磁盘使用情况,从中提取信息并将它们放入 .plot 文件中,以便稍后使用 bargraph.pl 绘制它们。我遇到的麻烦是当我像这样使用 awk 从 mpstat 获取时间时

mpstat | awk 'FNR == 4 {print $1;}' >> CPU_usage.plot 

它会在代码末尾打印一个新行。我尝试使用 printf,因为这适用于我的其他代码行,无需添加新代码行即可获取所需的特定信息,但我不知道如何格式化它。有没有办法用 awk 或我可以用来完成这个的任何其他方法来做到这一点?提前致谢。

当使用命令 mpstat 时,这就是 bash 返回的内容

Linux 3.4.0+ (DESKTOP-JM295S0)  04/30/2017      _x86_64_        (4 CPU)

03:56:43 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:56:43 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

这就是我要完成的工作,将时间、usr、sys 和 idle 放入一个名为 CPU_usage.plot 的文件中。这是我想放入文件中的内容:

03:56:43     0.00     0.00     100.00

我得到的是:

03:56:43
0.00     0.00     100.00

这是我的代码:

mpstat | awk 'FNR == 4 {print $1;}' >> CPU_usage.plot 
mpstat | awk 'FNR == 4 {printf " %f", $4;}' >> CPU_usage.plot 
mpstat | awk 'FNR == 4 {printf " %f", $6;}' >> CPU_usage.plot 
mpstat | awk 'FNR == 4 {printf " %f\n", $13;}' >> CPU_usage.plot 

最佳答案

使用以下awk方法:

mpstat | awk 'NR==4{print $1,$4,$6,$13}' OFS="\t" >> CPU_usage.plot

现在,CPU_usage.plot 文件应包含:

03:56:43    0.00    0.00    100.00

关于linux - 使用 awk 在不添加新行的情况下将时间添加到 .plot 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43710941/

相关文章:

linux - 以日期作为名称前缀的 Unix 文件列表

linux - 从输入(sshpass?)在多个本地服务器上执行 SSH remote cmd exec

linux - 从另一个 shell 脚本执行 shell 脚本并传递关键字作为参数

bash - 如何使用 Unix 变量在 session {bash} 中设置和保留值

c++ - 如何使用 gdb 找到全局变量的析构函数调用?

linux -/etc/shadow中密码部分的 "!"和 "*"是什么意思?

c - Windows 到 Linux 的 Port C 项目

bash:从数组中删除变量?

bash - AWK 记录分隔符设置为空行不起作用

bash - 无法通过正则表达式过滤bind -p的输出