如何在每次迭代时以批处理模式从Linux Top获取输出?

时间:2013-12-10 10:47:21

标签: linux bash logging batch-processing top-command

我尝试使用Arch Linux上的top将CPU和内存统计信息记录到文件中。我只对一个特定的过程感兴趣并获得所需的参数,如下所示:

top -b -n1 -p 310 | tail -fn 1 | awk '{printf "%s,%s,%s,%s\n",$1,$12,$9,$10}'

这给了我一个输出到命令行,如:

310,name,0.0,10.5

所以现在,如果我想以1秒的延迟运行此命令10次并将输出写入日志文件我使用:

top -b -n10 -p 310 -d 1 | tail -fn 1 | awk '{printf "%s,%s,%s,%s\n",$1,$12,$9,$10}' >> log.txt

但是,而是逐行打印到日志文件,我只得到最后一个输出。所以我的日志文件只包含1行,虽然top必须执行10次。

我在这里做错了什么?

PS:打印到命令行而不是日志文件只产生1行(最后一个输出)......

1 个答案:

答案 0 :(得分:1)

问题是因为你使用了tail命令。试试这样的事情

top -p 310-b -n2 -d 1 | grep -w 310 | awk '{printf "%s,%s,%s,%s\n",$1,$12,$9,$10}'

我使用grep -w过滤仅包含您感兴趣的信息的行