仅获取连续标准输出的最后一行

仅获取连续标准输出的最后一行

我在用着萨尔从我的收集网络统计数据wlp2s0界面(1秒间隔),如下所示:

$ sar -n DEV 1 | grep wlp2s0

连续输出如下所示:

18:15:06       wlp2s0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
18:15:07       wlp2s0      1,00      2,00      0,12      0,28      0,00      0,00      0,00      0,00
18:15:08       wlp2s0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
18:15:09       wlp2s0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
18:15:10       wlp2s0      0,00      1,00      0,00      0,24      0,00      0,00      0,00      0,00
18:15:11       wlp2s0      0,00      1,00      0,00      0,24      0,00      0,00      0,00      0,00

我只想在 .txt 文件中写入输出的最后一行(当前测量值)。问题是,我不知道如何构建一个命令来执行此操作。

我可以写入文件的唯一方法(文件的大小不断增加,这不是我想要的)是通过执行以下操作:

$ sar -n DEV 1 > output.txt

标准输出始终在增加,并且因为我正在覆盖该文件,所以所有先前和即将到来的行都将被写入。

[编辑] 我的问题不依赖于这个工具(sar),它发生在任何具有连续输出的工具上。我听说过循环缓冲区,但我认为它在这种情况下不起作用。

答案1

这可以在 shell 内完成,方法是循环输出行,并将每一行写入所需的输出文件,如下所示:

sar -n DEV 1 |
grep wlp2s0  |
while read ln
do
  printf '%s\n' "$ln" > output.txt
done

@OleTangeperl基于 - 的解决方案在进程创建方面可能更有效,但如果您的 shell 恰好有内置的printf此方法可能几乎同样精简。

答案2

sar -n DEV 1 |
  perl -ne 'if(/wlp/) { open(O,">current"); print O; close O }'

相关内容