Stdout

僅獲取最後一行連續標準輸出

  • July 20, 2019

我正在使用sar從我的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

標準輸出一直在增加,因為我正在覆蓋文件,所以將寫入所有先前和即將到來的行。

$$ EDIT $$我的問題不依賴於這個工具(sar),它發生在任何具有連續輸出的工具上。我聽說過循環緩衝區,但我認為在這種情況下它不會起作用。

這可以在 shell 中通過循環輸出行並將每一行寫入所需的輸出文件來完成,如下所示:

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

@OleTangeperl基於 - 的解決方案在程序創建方面可能更有效,但如果你的 shell 恰好有一個內置的printf這個方法可能幾乎一樣精益。

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

引用自:https://unix.stackexchange.com/questions/531055