2014-07-02 81 views
1

比方說,我們有一個輸入file_789通AWK計算結果的變量

1 
1 
1 

有,我們可以輸出awk的計數結果爲變量,這樣我們就可以打印出以下任何方式?

Cargo 789 has 3 items 

現在我們嘗試:

for cargo in 789 

do 

awk '{ sum+=$1} END {print sum}' file_${cargo} # This will give us a result of "3". 

echo "Cargo ${cargo} has ${calculation} items" 

done 

不知道是否有什麼辦法awk的一個班輪結果傳遞到$ {}計算回聲所以可以做的工作?謝謝〜!

回答

1

awk計算可以存儲在一個shell變量:

calculation=$(awk '{ sum+=$1} END {print sum}' "file_${cargo}") 

或者,您也可以在awk做到既計算和打印:

awk '{ sum+=$1} END {print "Cargo '"${cargo}"' has " sum " items"}' "file_${cargo}" 

或者,我們可以使用printf其中工程更好的空文件:

awk -v cargo="$cargo" '{sum+=$1} END {printf "Cargo %s has %d items\n", cargo, sum}' "file_${cargo}" 

另外,使用選項-v cargo="$cargo"可以簡化報價。

+0

注意:計算= $(awk'{sum + = $ 1} END {print sum-1}'file_789)只適用於bash not tcsh/csh – Chubaka

+0

感謝您的出色解決方案! – Chubaka

+0

@Chubaka - 不要在t/csh中編寫腳本(谷歌「csh爲什麼不」),並且不要像第二個解決方案那樣跳入/跳出awk。如果你想打印來自awk的結果,你會做'awk -v cargo ='$ cargo''{sum + = $ 1} END {printf「貨物%s有%d個物品\ n」,貨物,總和}''這也是一種保護你自己的總和的方法,如果文件爲空,它將被打印爲空字符串''「'而不是'0'。 –