Linux
使用 awk 對 while 循環值求和時遇到問題
我試圖在腳本末尾得到總和 ,
36962
以呼應$TOTAL
,但我無法讓它工作。有什麼建議嗎?這是一個學校項目,我對 Bash 很生疏。TOTAL=0 while read p; do awk '{ if ($1 > 100 ) print TOTAL+=$1}' echo $TOTAL done < ipuniq.txt
- 6578
- 6723
- 32735
- 36962
- 迴聲 -> 0
該
TOTAL
變數是一個shell變數,因此awk
不會知道它。在您的awk
命令中,TOTAL
變數在每次迭代中都未設置,因此每次都將其重置為單個值,然後列印。
awk
此外,在這樣的循環中使用似乎毫無意義。
awk
可以使用以下 1 行自己執行此操作:awk '$1 > 100 { total+=$1 } END { print total }' ipuniq.txt
不需要循環或其他命令。
但是,如果您的作業要求您使用 bash/shell,您可以這樣做:
total=0 while read -r p _; do ((p>100)) && total=$((total+p)) done < ipuniq.txt echo "$total"
這將使用 shell 算術表達式來檢查 的值
p
是否大於 100,如果是,則將其添加到total
.另外注意:我已在
-r
您的命令中添加了該選項,read
因為這將按字面意思列印反斜杠(您的案例可能不需要,但我更喜歡一直使用-r
,除非我特別有理由不這樣做。)我還添加了
_
參數名稱,這將防止p
被設置為不需要的輸入。read
會將所有剩餘單詞分配給最後一個參數,因此在您的情況下,假設您的文件包含數字和 IP,例如:1 10.10.10.10 2 10.10.10.11
如果沒有參數來捕捉雜物,
p
將設置為:p='1 10.10.10.10'
然後:
p='2 10.10.10.11'