एक स्ट्रिंग दी गई है जो संख्याओं के एक मैट्रिक्स को दर्शाती है। आपको उस मैट्रिक्स की पंक्तियाँ और स्तंभ लौटाने हैं।
तो मान लीजिए, आपको एक ऐसी स्ट्रिंग मिली है जिसमें न्यूलाइन भी शामिल हैं:
9 8 7
5 3 2
6 6 7
जो इस मैट्रिक्स को दर्शाती है:
1 2 3
|---------
1 | 9 8 7
2 | 5 3 2
3 | 6 6 7
आपका कोड ऐसा होना चाहिए जो इन्हें निकाल सके:
हमारे उदाहरण मैट्रिक्स की पंक्तियाँ:
और उसके स्तंभ:
यह पहला अभ्यास है जिसमें हल कोई "main" स्क्रिप्ट नहीं है। इसका उद्देश्य फंक्शनों की एक लाइब्रेरी लिखना है, जिसे दूसरे awk प्रोग्रामों में शामिल किया जा सके। इस अभ्यास में देखने के लिए कई दिलचस्प नए कॉन्सेप्ट हैं।
नीचे दिए गए जिन भागों पर "(gawk)" का टैग लगा है, वे खास तौर पर GNU awk के एक्सटेंशन हैं।
इस अभ्यास में आप डेटा मुख्य इनपुट स्ट्रीम से नहीं, बल्कि एक फाइल से पढ़ेंगे।
Gnu awk मैनुअल में getline के बारे में पढ़िए, खास तौर पर Getline/File और Getline/Variable/File रूपों के बारे में।
इस हल को लागू करने का एक तरीका द्वि-आयामी ऐरे भी हो सकता है। GNU awk में इसे दर्शाने के दो तरीके हैं:
टेस्ट फाइल में @include डायरेक्टिव पर ध्यान दीजिए।
यह gawk को निर्देश देता है कि वह उस नाम वाली फाइल को पढ़े और उसका मूल्यांकन करे।
awk के सभी वेरिएबल ग्लोबल होते हैं (सिवाय फंक्शन पैरामीटर के, जो उस फंक्शन के भीतर ही लोकल होते हैं)।
नामों के टकराव की संभावना बहुत ज़्यादा रहती है, खास तौर पर जब तीसरे पक्ष की लाइब्रेरी शामिल की जाती हैं।
नेमस्पेस यह बाँटने का तरीका है कि वेरिएबल कहाँ संग्रहीत किए जाएँ।
इस अभ्यास की फाइलों में @namespace डायरेक्टिव पर ध्यान दीजिए।
डिफॉल्ट नेमस्पेस का नाम "awk" है। डिफॉल्ट नेमस्पेस होने से प्रोग्रामर किसी दूसरे नेमस्पेस वाले फंक्शन के अंदर से awk के बिल्ट-इन फंक्शन को कॉल कर सकता है।
ऐरे पैरामीटर रेफरेंस से भेजे जाते हैं। फंक्शन के अंदर ऐरे में किए गए बदलाव कॉल करने वाले को दिखाई देते हैं।
गैर-ऐरे पैरामीटर वैल्यू से भेजे जाते हैं।
अनटाइप्ड पैरामीटर के लिए यह इस पर निर्भर करता है कि फंक्शन उनके साथ क्या करता है:
पूरी जानकारी मैनुअल में फंक्शन आर्गुमेंट वैल्यू से या रेफरेंस से भेजना में दी गई है।
फंक्शन स्कोप वाले (लोकल) वेरिएबल "वैल्यू से भेजे जाने" वाले पैरामीटर इस्तेमाल करके बनाए जा सकते हैं। किसी फंक्शन को उसके सूचीबद्ध पैरामीटर की संख्या से कम वैल्यू भेजना कोई एरर नहीं है; अतिरिक्त पैरामीटर तब तक "अनटाइप्ड" रहते हैं जब तक उनका इस्तेमाल नहीं होता। फंक्शन के भीतर इन्हें स्केलर वैल्यू असाइन की जा सकती हैं, और वे ग्लोबल नेमस्पेस में संग्रहीत नहीं होतीं।
परंपरा के अनुसार फंक्शन सिग्नेचर में पहले अपेक्षित पैरामीटर आते हैं, उसके बाद कुछ खाली जगह, और फिर लोकल पैरामीटर। एक उदाहरण:
function add(a, b, total) {
# here, `typeof(total)` is "untyped"
total = a + b
# now, `typeof(total)` is "number"
return total
}
BEGIN {
sum = add(5, 10)
print sum # 15
print typeof(total) # untyped, meaning "total" is unused in this scope
}
Exercism पर साइन अप कीजिए और AWK को 3 कॉन्सेप्ट92 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।