Bash

計算上一個程序的輸出行數

  • May 29, 2018

我正在嘗試計算某個程序產生的輸出行數。問題是,程序需要很長時間才能執行,我想向使用者顯示輸出。有沒有辦法計算最後一個命令輸出的行數?

我可以這樣做program | wc -l,但這不會向使用者顯示輸出。據我所知,我必須這樣做program; program | wc -l——但程序至少需要一分鐘才能執行,所以我不想為了在底部顯示行數而多次執行。

編輯:

  • 有沒有辦法在輸出發生時(逐行)顯示輸出,然後在最後返回一個計數?

您可以像往常一樣使用tee拆分輸出流,將一個副本發送到 STDOUT,另一個副本發送到 STDOUT。wc

program | tee >(wc -l)

>(cmd)是 bash 語法,這意味著執行該位cmd並將該位替換>(cmd)為該程序的 STDIN(連接到的命名管道)的路徑。

一種選擇是使用 awk,它可以進行計數並列印到標準輸出。

program | awk '{ print } END { print NR }'

awk中,NR 是目前行號。您可以使用 perl 完成相同的操作:

program | perl -pe 'END {print "$.\n"}'

或者sed

program | sed -n 'p;$='

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