Command

立即在每行輸出上執行命令

  • March 24, 2019

我發現當我執行一個執行具有連續輸出行的軟體的命令時,例如像 tcpdump 或 tshark 這樣的流量監視器,該命令會不斷計算螢幕上的數字,如 4、8、12 … 等等。

command... | awk -F ' ' '{ANY COMMAND}'

我希望我的 bash 腳本在每行輸出而不是每千行之後執行操作。我怎樣才能做到這一點?

執行一個產生大量輸出的軟體時有一個很好的例子,你可以像這樣放置管道運算符:

command... | awk -F ' ' '{print $1}'

它將計算從 0 到 1000+ 的數字,然後僅列印一次所有正確資訊,但不會在腳本執行時立即列印。

如果我使用以下命令將輸出放入文件中:

command... > file.txt

…然後當命令提供任何輸出時,數據會立即出現。我想知道使用管道操作員時導致延遲的原因是什麼?

您可以使用此程序 ( unbiffer) 停止緩衝程序的輸出:

unbuffer command... | awk ......

你得到這個“延遲”的原因是 UNIX 和 Linux 中的大部分 I/O 操作都是緩衝區

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