Command
立即在每行輸出上執行命令
我發現當我執行一個執行具有連續輸出行的軟體的命令時,例如像 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 操作都是緩衝區