我发现当我运行一个命令时,该命令执行具有连续输出行的软件,例如 tcpdump 或 tshark 之类的流量监视器,该命令会不断计数屏幕上的数字,例如 4、8、12 ... 等等。
command... | awk -F ' ' '{ANY COMMAND}'
我希望我的 bash 脚本在每行输出而不是每千行之后执行操作。我怎样才能做到这一点?
运行一个产生大量输出的软件时有一个很好的例子,你可以像这样放置管道运算符:
command... | awk -F ' ' '{print $1}'
它将计算从 0 到 1000+ 的数字,然后仅打印一次所有正确信息,但不会在脚本执行时立即打印。
如果我使用以下命令将输出放入文件中:
command... > file.txt
...然后当命令提供任何输出时,数据会立即出现。我想知道使用管道操作员时导致延迟的原因是什么?
您可以使用此程序 (
unbiffer
) 停止缓冲程序的输出:你得到这个“延迟”的原因是 UNIX 和 Linux 中的大部分 I/O 操作都是缓冲区