繁体   English   中英

如何将Unix“ Top”命令输出捕获到CSV文件?

[英]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行执行以下替换:

  • 用任何空格替换任何前导空格(否则,当PID右对齐时,您会得到第一列为空)。
  • 请勿将任何尾随空格替换为空白(类似的做法是避免在数据后留空字段)。
  • 用逗号替换相邻空格的所有剩余行。 打印此行。

最后,在第12行,我们完成了操作,因此退出了sed

外壳程序不关心您要重定向到的文件的名称,通常,Unix上的文件扩展名是非正式的修饰,而不是某些平台上的文件类型说明符。

您可以执行echo hello >outputfile.ps ,输出仍将是文本,而不是PostScript(或.ps文件扩展名的许多其他可能解释)。 无论如何, echo命令都不知道它正在被重定向,因为无论如何,它是在命令运行之前由外壳处理的。 (好吧, echo是内置的shell,因此在这种情况下,理论上可能会有一些协调。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM