我正在尝试获取前 5 行top
通过 shell 脚本命令&我需要将输出写入csv文件(我需要每 15 秒监控一次结果)。最后,我需要使用获得的数据表绘制图表。
我得到了 shell 脚本来编写前 5 行top
命令给一个txt file :
#!/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 file ?
如果您想修剪连续的空格并将其替换为逗号,请尝试
top -b -n 3 | sed -n '8, 12{s/^ *//;s/ *$//;s/ */,/gp;};12q'
The sed
脚本在第 8 行到第 12 行执行以下替换:
- 将任何前导空格替换为空(否则当 PID 右对齐时,您会得到一个空的第一列)。
- 将所有尾随空格替换为空(类似地避免数据后的空字段)。
- 用逗号替换所有剩余的相邻空格。打印这一行。
最后,在第 12 行,我们完成了,所以我们退出sed
.
shell 不会关注您重定向到的文件的名称,通常,Unix 上的文件扩展名是非正式的装饰,而不是像某些平台上的文件类型说明符。
你可以做echo hello >outputfile.ps
并且输出仍然是文本,而不是 PostScript(或其他一些可能的解释).ps
文件扩展名)。无论如何,echo
命令不知道它正在被重定向,因为无论如何,这是由 shell 在命令运行之前处理的。 (出色地,echo
是一个内置的 shell,所以理论上在这种情况下可能会有一些协调。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)