awk

2010-10-28 12 views
6

का उपयोग कर घंटों (पंक्तियों) द्वारा कॉलम का औसत मेरे पास एक फ़ाइल में निम्न पंक्तियां हैं जिन्हें मैं तीसरे कॉलम का औसत घंटे प्राप्त करना चाहता हूं।awk

2010-10-28 12:02:36: 5.1721851 secs 
2010-10-28 12:03:43: 4.4692638 secs 
2010-10-28 12:04:51: 3.3770310 secs 
2010-10-28 12:05:58: 4.6227063 secs 
2010-10-28 12:07:08: 5.1650404 secs 
2010-10-28 12:08:16: 3.2819025 secs 

2010-10-28 13:01:36: 2.1721851 secs 
2010-10-28 13:02:43: 3.4692638 secs 
2010-10-28 13:03:51: 4.3770310 secs 
2010-10-28 13:04:58: 3.6227063 secs 
2010-10-28 13:05:08: 3.1650404 secs 
2010-10-28 13:06:16: 4.2819025 secs 

2010-10-28 14:12:36: 7.1721851 secs 
2010-10-28 14:23:43: 7.4692638 secs 
2010-10-28 14:24:51: 7.3770310 secs 
2010-10-28 14:25:58: 9.6227063 secs 
2010-10-28 14:37:08: 7.1650404 secs 
2010-10-28 14:48:16: 7.2819025 secs 

मैं पूरी फ़ाइल के लिए औसत प्राप्त करने के लिए उत्पादन

Average = 4.49154 

साथ

cat filename | awk '{sum+=$3} END {print "Average = ",sum/NR}' 

किया, लेकिन घंटे के हिसाब से औसत तोड़ने के लिए चाहते हैं। मैं उत्पादन को पाइप करने से पहले घंटे के लिए एक grep चुपके कर सकते हैं, लेकिन उम्मीद है कि, यह एक लाइनर के साथ ऐसा करना चाहते हैं।

आदर्श रूप में, उत्पादन की तरह

Average 12:00 = _computed_avg_ 
Average 13:00 = _computed_avg_ 
Average 14:00 = _computed_avg_ 

और इतने पर कुछ होगा।

आवश्यक रूप से उत्तर की तलाश नहीं है, लेकिन सही दिशा में इंगित करने की उम्मीद है।

बहुत धन्यवाद! ताकि आप घंटे के हिसाब से औसत स्टोर कर सकते हैं

के.एम.

उत्तर

11

मैं फ़ील्ड परिसीमक पेट के लिए, कुल सरणी में विभिन्न चाबी के लिए एक साहचर्य सरणी में स्थापित करेगा तो, और अंत में औसत की गणना:

gawk -F: 'NF == 4 { sum[$1] += $4; N[$1]++ } 
      END  { for (key in sum) { 
         avg = sum[key]/N[key]; 
         printf "%s %f\n", key, avg; 
        } }' filename | sort 

अपने परीक्षण डाटा पर, यह देता है:

2010-10-28 12 4.348022 
2010-10-28 13 3.514688 
2010-10-28 14 7.681355 

यह सही उत्तर उत्पन्न करना चाहिए भले ही डेटा समय क्रम में न हो (कहें कि आप अनुक्रम से दो लॉग फ़ाइलों को जोड़ते हैं)। ध्यान दें कि गॉक संख्यात्मक रूप से '3.123 सेकेंड' मानों को जोड़ देगा। अंतिम क्रम औसत अनुक्रम में औसत प्रस्तुत करता है; इस बात की कोई गारंटी नहीं है कि चाबियाँ समय अनुक्रम में मुद्रित की जाएंगी।

+0

एक आकर्षण की तरह काम करता है। जोनाथन और नोविकोव दोनों का धन्यवाद। अब मैं इसे इंजीनियर कर दूंगा और समझने की कोशिश करूंगा कि सभी अलग-अलग हिस्सों (एआरपी एआरएस) क्या करते हैं ... (-; –

संबंधित मुद्दे