Bash
計算上一個程序的輸出行數
我正在嘗試計算某個程序產生的輸出行數。問題是,程序需要很長時間才能執行,我想向使用者顯示輸出。有沒有辦法計算最後一個命令輸出的行數?
我可以這樣做
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;$='