我试图通过shell脚本获取前5行top
命令&我需要将输出写入 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 文件的解决方案?
答案 0 :(得分:5)
如果要修剪空白行并用逗号替换它们,请尝试
top -b -n 3 | sed -n '8, 12{s/^ *//;s/ *$//;s/ */,/gp;};12q'
sed
脚本在第8行到第12行执行以下替换:
最后,在第12行,我们完成了,所以我们退出sed
。
shell不会关注您重定向到的文件的名称,通常,Unix上的文件扩展名是非正式的装饰,而不是像某些平台上的文件类型说明符。
您可以执行echo hello >outputfile.ps
,输出仍然是文本,而不是PostScript(或.ps
文件扩展名的其他一些可能的解释)。无论如何,echo
命令不知道它被重定向,因为它在命令运行之前由shell处理,无论如何。 (好吧,echo
是一个内置的shell,所以理论上在这种情况下可能会有一些协调。)