将“watch”命令输出为列表

将“watch”命令输出为列表

我想对每分钟添加到日志文件的行数进行一些简单的计算。我还想存储每秒的计数。

我需要的是以下命令的输出作为列表,该列表每秒更新一次:

watch -n1 'wc -l my.log'

如何将“watch”命令的“更新”输出为列表?

答案1

您可以使用-t开关watch使其不打印标题。但是,这仍然会清除屏幕,因此您最好使用简单的 shell 循环:

while sleep 1; do
    wc -l my.log
done

优点之一是,您可以轻松添加其他命令(例如date)和/或通过管道传输输出sed以重新格式化它。顺便说一句,如果你在循环中交换,它会因错误而自动终止sleep 1wc

答案2

这是一个老问题,但我刚刚找到了一个非常简单的答案:

watch -n1 'wc -l my.log | tee -a statistics.log'

这将wc每秒执行一次,将其输出添加到 statistics.log 文件,并将其显示在屏幕上。
因此,您最终会得到一个充满数字的文件,代表连续的行数my.log

答案3

您可以创建一个脚本来为您完成此操作。我打电话给我的keep(就像,继续这样做)并将其放在bin路径上。

这是我的脚本:

#!/bin/bash
echo "Repeating command $* every second"
while sleep 1; do
    "$@"
done

答案4

请尝试以下操作:

watch -n1 'wc -l my.log >> statistics.log'

相关内容