[英]How To Capture Unix 'Top' Command Output to a CSV file?
我试图通过shell脚本获得top
命令的前5行,我需要将输出写入csv文件(我需要每15秒监视一次结果)。 最后,我需要使用获得的数据表来绘制图形。
我得到了shell脚本,将top
命令的前5行写入txt文件:
#!/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文件的解决方案?
如果要修剪空白行并将其替换为逗号,请尝试
top -b -n 3 | sed -n '8, 12{s/^ *//;s/ *$//;s/ */,/gp;};12q'
sed
脚本在第8至12行执行以下替换:
最后,在第12行,我们完成了操作,因此退出了sed
。
外壳程序不关心您要重定向到的文件的名称,通常,Unix上的文件扩展名是非正式的修饰,而不是某些平台上的文件类型说明符。
您可以执行echo hello >outputfile.ps
,输出仍将是文本,而不是PostScript(或.ps
文件扩展名的许多其他可能解释)。 无论如何, echo
命令都不知道它正在被重定向,因为无论如何,它是在命令运行之前由外壳处理的。 (好吧, echo
是内置的shell,因此在这种情况下,理论上可能会有一些协调。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.