仅将连续标准输出的最后一行保存到文件

时间:2019-07-17 16:55:04

标签: logging kernel output monitoring bandwidth

我正在使用 bmon 来监视无线接口的速度。终端命令将当前速度(Rx和Tx)打印到标准输出。

当我执行此命令时...

bmon -p wlp2s0 -o ascii | tee networktraffic.txt

...输出将被打印为txt文件,如下所示:

Interfaces                               RX bps         pps      %    TX bps         pps      %
  wlp2s0                                      0           0                0           0       
Interfaces                               RX bps         pps      %    TX bps         pps      %
  wlp2s0                                      0           0               81B          0       
Interfaces                               RX bps         pps      %    TX bps         pps      %
  wlp2s0                                      0           0               20B          0       
Interfaces                               RX bps         pps      %    TX bps         pps      %
  wlp2s0                                      0           0                5B          0       
(...)     

我正在覆盖文件,因此,随着终端中输出的增加,文件的大小也随之增加。

问题是,我只想将输出的最后一行(最新的速度度量)保存在文件中。但是,当我使用以下命令时:

bmon -p wlp2s0 -o ascii | tail -1 > networktraffic.txt

什么都不会写入文件。

我认为使用以下命令声明 bmon 以1s的间隔连续打印到终端也很重要:     bmon -p wlp2s0 -o ascii

我也很感谢其他监视工具的建议,这些建议可以使我一次节省一个速度值。

1 个答案:

答案 0 :(得分:0)

IIUC,您希望在任何给定时刻输入最后一行。

tail -1不会在文件遇到输入结束之前将任何内容写入文件,这永远不会发生。

您需要的是在文件开头写入每行输入的内容。像

bmon -p wlp2s0 -o ascii | while read LINE; do echo "$LINE" > networktraffic.txt; done

如果您需要多于一行,那么它会稍微复杂一些,但是仍然可以使用shell的whileread