2011-12-18 6 views
9

मेरे पास एक फ़ाइल है जिसमें एन * 10 लाइनें हैं, प्रत्येक पंक्ति जिसमें प्रत्येक संख्या शामिल है। मुझे हर 10 लाइनों को जोड़ना होगा और फिर ऐसे प्रत्येक समूह के लिए औसत प्रिंट करना होगा। मुझे पता है कि यह awk में करने योग्य है, मुझे नहीं पता कि कैसे। इस तरहप्रत्येक 10 लाइनों को कैसे समेटें और औसत AWK का उपयोग करके गणना करें?

उत्तर

14

कोशिश कुछ:

$ cat input 
1 
2 
3 
4 
5 
6 
2.5 
3.5 
4 
$ awk '{sum+=$1} (NR%3)==0{print sum/3; sum=0;}' input 
2 
5 
3.33333 

(10-लाइन ब्लॉक के लिए ग्रहण करें, स्पष्ट रूप से।)

+2

आप 'इस्तेमाल किया जा सकता था seq' दूर सार परीक्षण इनपुट करने के लिए:' seq 50 | awk '{योग + = $ 1} (एनआर 10%) == 0 {प्रिंट योग/10; sum = 0;} '' – progo

+0

एचएम, यह मेरे मामले में काम नहीं कर रहा है। क्या तथ्य यह है कि मैं दशमलव मानों पर काम कर रहा हूं, इसके साथ कुछ भी करना है? – gablin

+0

@ गैब्लिन: जो मैंने पोस्ट किया वह दशमलव मानों के साथ ठीक काम करता है। – Mat

1

कुछ इस तरह हो सकता है - यदि आप नहीं चाहते हैं

[jaypal:~/Temp] seq 20 > test.file 

[jaypal:~/Temp] awk ' 
{sum+=$1} 
(NR%10==0){avg=sum/10;print $1"\nTotal: "sum "\tAverage: "avg;sum=0;next}1' test.file 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
Total: 55 Average: 5.5 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
Total: 155 Average: 15.5 

सभी लाइनों को मुद्रित करने के लिए निम्नलिखित काम करेंगे।

[jaypal:~/Temp] awk ' 
{sum+=$1} 
(NR%10==0){avg=sum/10;print "Total: "sum "\tAverage: "avg;sum=0;next}' test.file 
Total: 55 Average: 5.5 
Total: 155 Average: 15.5 
संबंधित मुद्दे