2010-12-04 4 views
11

के साथ प्रारंभ वक्तव्य में गतिशील सरणी को परिभाषित करने के लिए कैसे मैं अपरिभाषित अनुक्रमणिका संख्या के साथ अपने BEGIN कथन में एक सरणी परिभाषित करना चाहता हूं; मैं एडब्ल्यूके में यह कैसे कर सकता हूं?एडब्ल्यूके

BEGIN {send_packets_0to1 = 0;rcvd_packets_0to1=0;seqno=0;count=0; n_to_n_delay[];}; 

मुझे n_to_n_delay [] के साथ समस्या है।

उत्तर

18

info gawk कहते हैं, भाग में:

'awk' में सरणी अल्पज्ञता अन्य प्रोग्रामिंग भाषाओं में सरणियों जैसे लगते हैं, लेकिन वहाँ मूलभूत अंतर हैं। 'Awk' में, यह नहीं है जिसका उपयोग शुरू करने से पहले किसी सरणी के आकार को निर्दिष्ट करने के लिए आवश्यक है। इसके अतिरिक्त, 'awk' में कोई भी संख्या या स्ट्रिंग, केवल पूर्णांक नहीं, एक सरणी अनुक्रमणिका के रूप में उपयोग की जा सकती है।

अन्य भाषाओं में, का उपयोग करने से पहले सरणी को "घोषित" किया जाना चाहिए, जिसमें यह निर्दिष्ट किया गया है कि में कितने तत्व या घटक हैं। ऐसी भाषाओं में, घोषणा कई तत्वों के लिए आवंटित स्मृति के एक संगत ब्लॉक का कारण बनती है। आमतौर पर, में एक सूचकांक एक सकारात्मक पूर्णांक होना चाहिए।

हालांकि, अगर आप एक सरणी के रूप में एक चर "की घोषणा करने के लिए" तो यह बाद में ग़लती से के रूप में एक अदिश एक त्रुटि पैदा करता है को संदर्भित करना चाहते हैं, तो आप इस अपने BEGIN खंड में शामिल कर सकते हैं:

split("", n_to_n_delay) 

जो होगा एक खाली सरणी बनाएँ।

इसका उपयोग मौजूदा सरणी को खाली करने के लिए भी किया जा सकता है। gawk में delete का उपयोग करने की क्षमता है, जबकि एडब्ल्यूके के अन्य संस्करण नहीं हैं।

+0

तनएक्स डेनिस, यह मेरे लिए पूरी जानकारी का उपयोग करता है। – Am1rr3zA

1

मुझे नहीं लगता कि आपको अजीब में सरणी को परिभाषित करने की आवश्यकता है। आप उन्हें नीचे दिए गए उदाहरण में उपयोग करते हैं:

{ 
    if ($1 > max) 
    max = $1 
    arr[$1] = $0 
} 

END { 
    for (x = 1; x <= max; x++) 
    print arr[x] 
} 

ध्यान दें कि कोई अलग परिभाषा नहीं है। उदाहरण The AWK Manual से लिया गया है।

+0

हां, अजीब में केवल हैशैप्स हैं और उन्हें घोषणा की आवश्यकता नहीं है। –