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

标签 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 行(最后的输出)...

最佳答案

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

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

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

关于linux - 如何在每次迭代中以批处理模式从 Linux Top 获取输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492362/

相关文章:

c# - ASP.NET Core 2.0 在抛出异常时使用 Serilog 记录堆栈跟踪

c - argv[argc] 是否等于 NULL 指针

mysql - 无法访问windows域中linux上的资源

java - 在将 EJBTransactionRolledbackException 记录到文件之前捕获它

git - 在 msysgit 中运行 MinGW/MSYS 工具

javascript - 安装 npm 包 weexpack 时校验和验证失败

java - Log4J 问题 -> [ fatal error ] :1:1: Content is not allowed in prolog

Linux:如何捕获进程的标准输出直到结束,但如果出现特定字符串则停止并返回非零代码?

c++ - 加载共享库时出错 : libcapnp-0. 5.3.so

mysql - 来自不带表的 SELECT 语句的非 NULL 日期时间值