仅将连续标准输出的最后一行保存到文件中
Save only last line of a continuous standard output to a file
我正在使用 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
我也很感激其他监控工具的建议,这些工具可以让我一次保存一个速度值。
IIUC 您想要在任何给定时刻输入的最后一行。
tail -1
在遇到输入结束之前不会向文件写入任何内容,这是永远不会发生的。
您需要的是在文件开头写入每个输入行的东西。像
bmon -p wlp2s0 -o ascii | while read LINE; do echo "$LINE" > networktraffic.txt; done
如果您需要不止一行,那么它会稍微复杂一些,但仍然可以使用 shell 的 while
和 read
.
我正在使用 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
我也很感激其他监控工具的建议,这些工具可以让我一次保存一个速度值。
IIUC 您想要在任何给定时刻输入的最后一行。
tail -1
在遇到输入结束之前不会向文件写入任何内容,这是永远不会发生的。
您需要的是在文件开头写入每个输入行的东西。像
bmon -p wlp2s0 -o ascii | while read LINE; do echo "$LINE" > networktraffic.txt; done
如果您需要不止一行,那么它会稍微复杂一些,但仍然可以使用 shell 的 while
和 read
.