2011-12-08 15 views
7

मैं इस तरह पाठ फ़ाइलों का एक समूह में संख्या का एक समूह के लिए औसत की गणना कर रहा हूँ:awk औसत की गणना या शून्य

grep '^num' file.$i | awk '{ sum += $2 } END { print sum/NR }' 

लेकिन कुछ समय फ़ाइल पैटर्न शामिल नहीं है, जिसमें मैं कैस स्क्रिप्ट शून्य वापस करना चाहते हैं। इस थोड़ा संशोधित एक लाइनर के किसी भी विचार?

उत्तर

14

आप एक अतिरिक्त प्रक्रिया को उत्पन्न करने के लिए सब कुछ पहले कर सकते हैं करने के लिए से अपने लोड (औसत) के लिए जोड़ रहे हैं। 'Grep' और 'awk' का उपयोग एक लाल झंडा है। आप लिखना बेहतर होगा:

awk '/^num/ {n++;sum+=$2} END {print n?sum/n:0}' file 
5

इस प्रयास करें:

... END { print NR ? sum/NR : 0 } 
1

उपयोग awk के त्रिगुट ऑपरेटर है, यानी m ? m : n जिसका मतलब है, अगर मीटर अपना महत्व होता है, इसका इस्तेमाल, और '?' ':' यह अन्य मूल्य का उपयोग करें। एन और एम दोनों स्ट्रिंग, संख्याएं या अभिव्यक्ति हो सकते हैं जो मूल्य उत्पन्न करते हैं।

grep '^num' file.$i | awk '{ sum += $2 } END { print sum ? sum/NR : 0.0 }' 
+0

अन्य उत्तर पहले से ही बेकार 'grep' को इंगित करते हैं, लेकिन शायद आप इसे अभी भी ठीक करना चाहते हैं। – tripleee

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