2017-02-25 29 views
2

我有以下模式的重複文件很多次:AWK計數模式相匹配,並且在他們之後總結的數字

<Content>Un relax en el ritmo trepidante de New York showReview(14443615, 'full'); 
<Date>Mar 22, 2008 
<Overall rating>3 
<No. Reader>-1 
<No. Helpful>-1 
<Overall>5 

所以我想算的<Overall>出現次數的數量不計算<Overall rating>。然後我想總結每個<Overall>標籤後面的數字。這是我的代碼。

awk -F'>' '$1=="<Overall" BEGIN{} 
    { 
     count++ 
     sum+=$2 
    } 
    END{printf "%.2f\n", sum/count}' *filename* 
+1

如果您刪除BEGIN部分,您的代碼似乎正常工作 – grail

+0

您的BEGIN'放錯了位置。它應該是「BEGIN {} $ 1 ==」 anishsane

回答

1

另一種方法

$ awk -F'<Overall>' 'NF==2 {sum+=$2; c++} 
        END {print (c?sum/c:0)}' file 
0

如果我理解正確的話,你想包含<Overall>所有行的值總結:

awk 'BEGIN{FS=">";sum=0} $0~/<Overall>/ {sum+=$2} END{print sum}' file 

一個例子是包含以下行會和的文件175

... 
<Overall>25 
<Overall>75 
... 
<Overall>50 
... 
<Overall>25 
... 
+0

恕我直言,OP想找到平均值,總值與總模式計數。 – Inian

+1

@Inian:哪裏有關於平均值的提及? 'sum'與'mean'不是一回事...... –

+0

ok同意平均值在OPs嘗試中看到總和/計數。並不意味着不敬,謝謝! – Inian