Stdout
僅獲取最後一行連續標準輸出
我正在使用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
@OleTange
perl
基於 - 的解決方案在程序創建方面可能更有效,但如果你的 shell 恰好有一個內置的printf
這個方法可能幾乎一樣精益。
sar -n DEV 1 | perl -ne 'if(/wlp/) { open(O,">current"); print O; close O }'