arrays - Search pattern and print hits lower than threshold -
यहाँ एक उदाहरण है जिसे मुझे चाहिए:
INPUT:
एक 5 एक 7 एक 11 बी 10 बी 11 बी 12 । । आउटपुट:
एक 2 बी 0 इसलिए मेरे थ्रेशोल्ड से कम हिट होने चाहिए यह मामला यह 2 डॉलर है & lt; 10)।
मेरा कोड है:
awk 'OFS = "\ t" {v [$ 1] + = $ 2; N [$ 1] ++} END {के लिए (एल में) {प्रिंट एल, एन [एल}}} 'इनपुट और मेरा आउटपुट है
< कोड> एक 3 बी 3 मुझे यकीन नहीं है कि कंडीशन को कहां रखें $ 2 & lt; 10 ।
आप थ्रेसहोल्ड स्टेटमेंट जैसे $ 2 & lt; -v value = XX के साथ दिया गया awk चर है। इसके अलावा, आप v [$ 1] + = $ 2 का उपयोग कर रहे हैं: यह राशि, मेल खाने वाले मामलों की गिनती नहीं है। सब एक साथ, मैं इसका उपयोग करूँगा:
< Code> awk -vt = 10 '{list [$ 1]} $ 2 & lt; t {count [$ 1] ++} END {के लिए (i सूची में) प्रिंट मैं, गिनती [i] +0}' file ध्यान दें हमें दो सरणियों का उपयोग करने की आवश्यकता है: एक को काउंटर का ट्रैक रखने के लिए और अन्य सभी संभावित मानों का ट्रैक रखें।
स्पष्टीकरण -
-vt = 10 थ्रेशोल्ड प्रदान करें। -
{सूची [$ 1]} सभी संभव पहले फ़ील्ड पर नज़र रखने का ट्रैक रखें। -
$ 2 & lt; t {count [$ 1] ++} यदि दूसरा क्षेत्र सीमा से छोटा है, काउंटर बढ़ाना। -
END {के लिए (i सूची) प्रिंट मैं, गिनती [i] + 0} अंत में, सभी प्रथम क्षेत्रों के माध्यम से लूप और प्रिंट की सीमा से कम मूल्य की संख्या को प्रिंट कर सकते हैं। गिनती [i] +0 चाल प्रिंट करता है 0 यदि मान सेट नहीं है। टेस्ट < (I) सूची में प्रिंट के लिए, [i] +0} एए गिनती करें> $ awk -vt = 10 '{list [$ 1]} $ 2 & lt; count {count [$ 1] ++} 2 बी 0
Comments
Post a Comment