2012-10-10 127 views
2

作報告我有相同的如下內容的報告:嘗試使用AWK

gold  1  1986 USA     Americal Eagle 
gold  1  1908 Austria-Hungary  Franz Josef 100 Korona 
silver 10  1981 USA    Ingot 
gold  1  1984 Switzerland   ingot 
gold  1  1979 RSA     Krugerrand 
gold  0.5 1981 RSA     Krugerrand 
gold  0.1 1986 PRC     Panda 
silver 1  1986 USA     Liberty dollar 
gold  0.25 1986 USA     Liberty 5-collar piece 
silver 0.5 1986 USA     Liberty 50-cent piece 
silver 1  1987 USA     Constitution dollar 
gold  0.25 1987 USA     Constitution 5-dollar piece 
gold  1  1988 Canada    Maple Leaf 

我想提取類似下面的報告:

Gold pieces:     9 
Weight of gold pieces:   6.10 
Value of gold pieces:  9729.50 

這個我所做的代碼:

BEGIN{} 
$1 ~/^gold$/ 
{ 
    goldWeight += $2 
    ++goldCounter 
} 
END{ 
    printf "Gold Pieces:\t\t%d\n" , goldCounter 
    printf "Weight of gold pieces:\t\t%1.2f\n" , goldWeight 
    printf "Value of gold pieces:\t\t%1.2f\n" , goldWeight*1771.00 
} 

該代碼不起作用。我的問題在哪裏?

回答

3

您需要的模式

$1 ~/^gold$/ { 
    goldWeight += $2 
    ++goldCounter 
} 

然後在括號中的比特適用的模式後的第一個支架。否則它適用於每一行。