Bash
如何使用 gnu texttools 執行連續的“wc -l”?
我當然知道
cat logfile.txt | wc -l 120
會告訴我文件中的行數。
然而
tail -f logfile.txt
將向我顯示另一個程序寫入的新行
logfile.txt
。是否可以將兩者結合起來,以便我使用標准文本實用程序獲得 logfile.txt 的連續更新行數?
我知道
watch wc -l logfile.txt
但我不想每次都重新計算整個文件,這似乎是一種浪費。每隔一秒左右需要一個僅附加的計數,並且可能在行尾使用一個
\r
而不是一個。\n
也許:
tail -n +1 -f file | awk '{printf "\r%lu", NR}'
請注意,它會為每一行輸入輸出一個數字(儘管如果發送到終端會覆蓋先前的值)。
或者您可以
tail -f
在 shell 中手動實現:n=0 while :; do n=$(($n + $(wc -l))) printf '\r%s' "$n" sleep 1 done < file
(請注意,它每秒最多執行一個
wc
和一個命令,並非所有外殼都內置。使用while內置,要獲得內置(至少在 Debian 上),您需要在前面添加(無論是否該目錄存在與否)或使用(不要問…))。sleep``ksh93``sleep``wc``/opt/ast/bin``$PATH``command /opt/ast/bin/wc
您可以使用
pv
,如:tail -n +1 -f file | pv -bl > /dev/null
但是請注意,當數字超過 1000 時,它會添加
k
, … 後綴(並且似乎沒有辦法解決這個問題)。M