一個簡單的測試腳本,在這裏:Bash一邊讀LINE一邊比較貓慢,爲什麼?
while read LINE; do
LINECOUNT=$(($LINECOUNT+1))
if [[ $(($LINECOUNT % 1000)) -eq 0 ]]; then echo $LINECOUNT; fi
done
當我做cat my450klinefile.txt | myscript
的CPU鎖定了100%,它可以處理約1000行第二。大約5分鐘時間處理cat my450klinefile.txt >/dev/null
在半秒鐘內完成的事情。
有沒有更有效的方式做到這一點。我只需要從stdin讀取一行,計算字節數,然後將它寫出到命名管道。但即使這個例子的速度是不可能的緩慢。每個1Gb的輸入行我需要做一些更復雜的腳本操作(關閉並打開一些數據正在饋送的管道)。
除了bash腳本和編譯工具之間的區別之外(請參閱paxdiablo的答案),您的比較不公平:cat只是在您的腳本執行一些計算時進行讀取(行計數) – Matteo
替換LINECOUNT = $(($ LINECOUNT + 1))''用'((LINECOUNT ++))' –
也爲了實際比較,您需要從腳本中刪除條件,現在您的問題如下所示:'當我試圖運輸20tonns木材,當我運行它沒有拖車它使用十倍以下!' –