【发布时间】:2016-05-01 17:41:00
【问题描述】:
我正在尝试通过 shell 脚本获取top 命令的前 5 行,并且我需要将输出写入 csv 文件(我需要每 15 秒监控一次结果)。最后,我需要使用获得的数据表绘制图表。
我得到了将top 命令的前 5 行写入 txt 文件的 shell 脚本:
#!/bin/bash
echo "execution started.."
top -b -n 3 | sed -n '7,1p' >> out.txt
while [ true ]; do
sleep 15
echo "running.."
top -b -n 3 | sed -n '8, 12p' >> out.txt
done
这是执行几次后的 out.txt 文件:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3983 arun 20 0 1662480 309580 40936 S 26.3 6.4 13:36.00 gnome-shell
17907 arun 20 0 130020 1680 1172 R 10.5 0.0 0:00.03 top
2016 root 20 0 221792 51172 9636 S 5.3 1.1 4:40.97 Xorg
11917 arun 20 0 7004884 570312 22040 S 5.3 11.7 0:48.83 java
1 root 20 0 59732 7156 3992 S 0.0 0.1 0:02.71 systemd
3983 arun 20 0 1662480 309580 40936 S 36.8 6.4 13:37.23 gnome-shell
2016 root 20 0 221792 51172 9636 S 10.5 1.1 4:41.14 Xorg
2720 mongod 20 0 624364 33716 5200 R 5.3 0.7 1:44.36 mongod
17918 arun 20 0 130020 1676 1172 R 5.3 0.0 0:00.02 top
1 root 20 0 59732 7156 3992 S 0.0 0.1 0:02.71 systemd
3983 arun 20 0 1662480 309580 40936 S 25.0 6.4 13:38.60 gnome-shell
2720 mongod 20 0 624364 33672 5160 S 5.0 0.7 1:44.46 mongod
12081 arun 20 0 2687496 314248 21436 S 5.0 6.5 3:05.51 java
17922 arun 20 0 130020 1680 1172 R 5.0 0.0 0:00.02 top
1 root 20 0 59732 7156 3992 S 0.0 0.1 0:02.71 systemd
但我需要 csv 格式的相同数据。我试图通过将输出文件名指定为 out.csv 来做到这一点!但这没有用。 (因为格式不正确,所以整个数据都在第一个 shell 中!)
您能否提供将相同输出写入 csv 文件的解决方案?
【问题讨论】:
-
while [ true ]只是巧合地工作。while [ false ]会做同样的事情。您可能是指不带括号的while true(这是shell 内置命令test的同义词)。 -
我回滚了您的最新编辑,因为它与我的回答特别相关。
-
stackoverflow.com/a/1221597/288875 可能会给您一些想法,如何使用
ps以自定义格式转储 CPU 使用数据
标签: linux file shell csv top-command