Aru*_*ran 2 linux csv shell file top-command
我试图top通过shell脚本获得前5行命令,我需要将输出写入csv文件(我需要每隔15秒监视一次结果).最后,我需要使用获得的数据表绘制图表.
我得到了shell脚本,将前5行top命令写入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
Run Code Online (Sandbox Code Playgroud)
几次执行后,这是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
Run Code Online (Sandbox Code Playgroud)
但我需要csv格式的相同数据.我试图通过输出文件名为out.csv来做到这一点!但那没用.(因为格式不正确,所以整个数据都在第一个shell内!)
您能否提供将相同输出写入csv文件的解决方案?
如果你想修剪空白行并用逗号替换它们,试试吧
top -b -n 3 | sed -n '8, 12{s/^ *//;s/ *$//;s/ */,/gp;};12q'
Run Code Online (Sandbox Code Playgroud)
该sed脚本在第8行到第12行执行以下替换:
最后,在第12行,我们完成了,所以我们退出了sed.
shell不会关注您重定向到的文件的名称,通常,Unix上的文件扩展名是非正式的装饰,而不是像某些平台上的文件类型说明符.
您可以这样做echo hello >outputfile.ps,输出仍然是文本,而不是PostScript(或.ps文件扩展名的许多其他可能的解释).在任何情况下,该echo命令都不知道它被重定向,因为无论如何,它在命令运行之前由shell处理.(好吧,echo是内置的shell,所以理论上在这种情况下可以有一些协调.)