Awk में एक सरणी हटाएँ


18

Awk में, मैं एक लूप के साथ एक ऐरे को खाली कर सकता हूं, जिससे यह एक खाली एरे बनता है, जो इसे डिलीट करने के बराबर है।

for (key in array) delete array[key];

क्या कोई सरल तरीका है? क्या मैं किसी सरणी को पूरी तरह से हटा सकता हूं, ताकि एक स्केलर के लिए चर नाम का फिर से उपयोग किया जा सके?

जवाबों:


29

वाक्य रचना

delete array

POSIX में वर्तमान संस्करणों में नहीं है, लेकिन यह लगभग सभी मौजूदा कार्यान्वयन (मूल awk, GNU, mawk, और बिजीबॉक्स सहित) द्वारा समर्थित है। इसे POSIX के भविष्य के संस्करण में जोड़ा जाएगा (देखें दोष 0000544 )।

सभी सरणी तत्वों को साफ़ करने का एक वैकल्पिक तरीका, जो पोर्टेबल और मानक-अनुरूप दोनों है, और जो एक बयान के बजाय एक अभिव्यक्ति है, splitसभी मौजूदा तत्वों को हटाने पर भरोसा करना है:

split("", array, ":")

इन सभी सहित delete array, GNU awk और mawk (लेकिन बिजीबॉक्स awk में नहीं) में, मूल awk में एक सरणी चर के रूप में चिह्नित चर को छोड़ दें। जहाँ तक मुझे पता है, एक बार एक चर को एक सरणी के रूप में उपयोग किया जाता है, तो इसे स्केलर चर के रूप में उपयोग करने का कोई तरीका नहीं है।


वैकल्पिक विभाजन समाधान सहायक था। यह आश्चर्यचकित करने वाला था कि एससीओ ऑपेरेंसर 5.0.7 ओके delete arrayएक सिंटैक्स त्रुटि को कॉल करता है, हालांकि मैन पेज कहता है कि सबस्क्रिप्ट वैकल्पिक है। $ awk 'BEGIN { A[1] = 0; delete A; }' awk: Syntax error at line 1 of program << BEGIN { A[1] = 0; de ... >> context is BEGIN { A[1] = 0; delete >>> A; <<< awk: illegal statement at line 1 of program << BEGIN { A[1] = 0; de ... >>यह जानकर और अधिक आश्चर्य हुआ कि delete array[subscript], जबकि त्रुटि के रूप में नहीं दिखाया गया था, यह भी काम नहीं किया था, और कई वेरिएंट array[subscript] = ""सभी समान रूप से अप्रभावी थे।
kulgrien

1
या सिर्फsplit("", array)
ryenus
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.