我目前正在使用
top -b -d 1 > file1.csv
将整个输出附加到 csv 文件。但是,我希望在 file1 中单独输入 Cpu(%us) 字段。我目前为止做到了这一点:
top -b -d 1|grep Cpu
我只能查看 Cpu 条目。
当我尝试
top -b -d 1|grep Cpu > file1.csv
它似乎不起作用,因为我甚至无法查看我的文件。
我的目的是动态绘制所有 CPU 值(存储在 csv 文件中)的 LiveGraph。谢谢!
答案1
总 CPU 使用率:
如果你只想要了解 CPU 使用率,可以尝试以下操作:
top -b -d1 -n1|grep -i "Cpu(s)"|head -c21|cut -d ' ' -f3|cut -d '%' -f1 > file1.csv
这将仅为您提供 CPU 值并更新文件中的值。如果您想将数据附加到文件(因为我看到您将其命名为 csv 文件),那么不要使用 one >,而要使用 two,例如>> file1.csv
。
对于每个线程和 CPU 使用率:
首先,您需要消除其余的列,这样更容易获取 CPU 数据。
- 运行
top
并按F。 - 在此菜单中,您可以选择要查看的列和不查看的列。对于您的情况,只需保留 CPU 列和名称(如果您需要名称)
- 按下ESC返回主顶部菜单并使用 Capital 保存西更改。现在您的命令更容易解析。
现在,对于一般的 CPU 使用率,您通常有其他工具,例如ps
,iostat
执行cat /proc/stat
。对于每个工具,您需要不同的解析,例如用于 top 的解析。我在这里只发布了 TOP,因为您在标题中明确提到了它。
笔记:应该注意的是,top 并不是查看 CPU 使用率或解析其值的最有效方法。对于某些用户,使用 cut 命令中的 f2 可以显示值,而对于其他用户,使用 f3
答案2
我认为使用top
可能不是最好的方法。我会考虑使用 /proc/stat。我发现了一篇名为“从 /proc/stat 计算 CPU 使用率“这也许能解决您的大部分问题。
答案3
这需要一点时间,因为在管道开始工作之前似乎需要填充一个缓冲区。
首先尝试少量的迭代(注意:-n2 表示 2 次迭代):
top -b -d1 -n2 | grep Cpu | cut -c 35-39
关于您的评论:如果您将标准输出重定向到带有的文件top -b -d 1 > file.csv
,则无法将标准输出通过管道传输到 grep 命令中。
看:
echo "Standard output" | grep "out"
对阵
echo "Standard output" >/tmp/foo | grep "out"
在第二种情况下,您没有任何输出。
答案4
top -b -n1 | grep Cpu | sed -r 's@.+:\s([0-9\.]+).+@\1@'
正如前面所述,选项 -b 与 -n 1 结合使用将从顶部输出单个文本,而不是不断更新的默认设置。然后,您可以通过管道传输到 sed 来查找您要查找的值。