awk
उपयोगी एक-लाइनर - एक सीएसवी आदि से औसत गणना
खोज…
मजबूत प्रसंस्करण सारणीबद्ध डेटा (CSV एट अल।)
Awk के साथ सारणीबद्ध डेटा को संसाधित करना बहुत आसान है, बशर्ते कि इनपुट सही ढंग से स्वरूपित हो। सारणीबद्ध डेटा बनाने वाले अधिकांश सॉफ़्टवेयर स्वरूपों के इस परिवार की विशिष्ट विशेषताओं का उपयोग करते हैं, और तालिका के डेटा को संसाधित करने वाले awk प्रोग्राम अक्सर किसी विशिष्ट सॉफ़्टवेयर द्वारा उत्पादित डेटा के लिए विशिष्ट होते हैं। यदि अधिक सामान्य या मजबूत समाधान की आवश्यकता होती है, तो अधिकांश लोकप्रिय भाषाएं पुस्तकालयों को सारणीबद्ध डेटा में पाई जाने वाली कई विशेषताओं के साथ समायोजित करती हैं:
- पहली पंक्ति में वैकल्पिक कॉलम नाम
- उद्धृत और अयोग्य स्तंभ मानों का मिश्रण
- विभिन्न सीमांकक
- फ़्लोटिंग संख्याओं के लिए स्थानीयकृत प्रारूप
हालांकि यह निश्चित रूप से जागरण के साथ इन सभी विशेषताओं को साफ और उदारता से संभालना संभव है, संभवतः यह प्रयास के लायक नहीं है।
सारणीबद्ध डेटा में दो स्तंभों का आदान-प्रदान
एक फ़ाइल का उपयोग करके दिया ; स्तंभ परिसीमनकर्ता के रूप में। पहले और दूसरे कॉलम को अनुमति देना इसके द्वारा पूरा किया जाता है
awk -F';' -v 'OFS=;' '{ swap = $2; $2 = $1; $1 = swap; print }'
सारणीबद्ध डेटा से एक कॉलम में मूल्यों के औसत की गणना करें
एक फ़ाइल का उपयोग करके दिया ; स्तंभ परिसीमनकर्ता के रूप में। हम निम्नलिखित प्रोग्राम के साथ दूसरे कॉलम में मानों की गणना करते हैं, बशर्ते इनपुट एक छात्र समूह के ग्रेड की सूची है:
awk -F';' '{ sum += $2 } END { print(sum / NR) }' <<EOF
Alice;2
Victor;1
Barbara;1
Casper;4
Deborah;0
Ernest;1
Fabiola;4
Giuseppe;4
EOF
इस कार्यक्रम का आउटपुट 2.125 ।
याद रखें कि NR , संसाधित की जा रही पंक्ति की संख्या को END ब्लॉक में रखता है इसलिए यह फ़ाइल में कुल पंक्तियों की संख्या रखता है।
याद रखें कि कई अनुप्रयोगों (निगरानी, सांख्यिकी) में , मंझला अधिक उपयोगी जानकारी है। संबंधित उदाहरण देखें।
सारणीबद्ध डेटा में विशिष्ट कॉलम का चयन करना
हम एक फ़ाइल का उपयोग करके मान लेते हैं; स्तंभ परिसीमनकर्ता के रूप में। कॉलम के एक विशिष्ट सेट का चयन करने के लिए केवल एक प्रिंट स्टेटमेंट की आवश्यकता होती है। उदाहरण के लिए, निम्न प्रोग्राम अपने इनपुट से कॉलम 3, 4 और 7 का चयन करता है:
awk -F';' -v 'OFS=;' '{ print $3, $4, $7 }'
प्रिंट करने के लिए लाइनों को अधिक सावधानी से चुनना हमेशा की तरह संभव है। निम्न प्रोग्राम अपने इनपुट से कॉलम 3, 4 और 7 का चयन करता है जब पहला क्षेत्र Alice या Bob :
awk -F';' -v 'OFS=;' '($1 == "Alice") || ($1 == "Bob") { print $3, $4, $7 }'
सारणीबद्ध डेटा से एक कॉलम में मूल्यों के माध्यिका की गणना करें
एक फ़ाइल का उपयोग करके दिया ; स्तंभ परिसीमनकर्ता के रूप में। हम निम्नलिखित कार्यक्रम के साथ दूसरे कॉलम में मानों के मध्यांक की गणना करते हैं, जिसे GNU awk के लिए लिखा गया है। प्रदत्त इनपुट एक छात्र समूह के ग्रेड की सूची है:
gawk -F';' '{ sample[NR] = $2 }
END {
asort(sample);
if(NR % 2 == 1) {
print(sample[int(NR/2) + 1])
} else {
print(sample[NR/2])
}
}' <<EOF
Alice;2
Victor;1
Barbara;1
Casper;4
Deborah;0
Ernest;1
Fabiola;4
Giuseppe;4
EOF
इस कार्यक्रम का आउटपुट 1 ।
याद रखें कि NR , संसाधित की जा रही पंक्ति की संख्या को END ब्लॉक में रखता है इसलिए यह फ़ाइल में कुल पंक्तियों की संख्या रखता है।
Awk के कई कार्यान्वयन में सरणियों को क्रमबद्ध करने के लिए एक फ़ंक्शन नहीं है, इसलिए इसलिए ऊपर दिए गए कोड का उपयोग करने से पहले इसे परिभाषित करने की आवश्यकता है।
दो पैटर्न के बीच लाइनों का एक सेट का चयन करना
पैटर्न मिलान का उपयोग awk साथ प्रभावी ढंग से किया जा सकता है क्योंकि यह उन क्रियाओं को नियंत्रित करता है जो इसका अनुसरण करती हैं अर्थात { pattern } { action } । पैटर्न मिलान में से एक शांत उपयोग एक फ़ाइल में दो पैटर्न के बीच चयन करने के लिए एक से अधिक कहना है patternA और patternB
$ awk '/patternA/,/patternB/' file
मान लें कि मेरी फ़ाइल सामग्री निम्नानुसार है, और मैं केवल उपरोक्त पैटर्न के बीच की लाइनें निकालना चाहता हूं: -
$ cat file
This is line - 1
This is line - 2
patternA
This is line - 3
This is line - 4
This is line - 5
patternB
This is line - 6
$ awk '/patternA/,/patternB/' file
patternA
This is line - 3
This is line - 4
This is line - 5
patternB
उपरोक्त कमांड किसी भी विशिष्ट { action } को मेल खाने वाली लाइनों को प्रिंट करने के अलावा नहीं करता है, लेकिन लाइनों के सबसेट के भीतर किसी भी विशिष्ट कार्यों को एक्शन ब्लॉक ( {} ) के साथ लागू किया जा सकता है।