我在用着萨尔从我的收集网络统计数据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 }'