2016-08-01 4 views
7

क्या होगा क्या जब $1, $2 का उपयोग कर ... END ब्लॉक में, जैसे:क्या एडब्ल्यूके में ईएनडी ब्लॉक में परिभाषित फ़ील्ड हैं?

awk '{print $3}END{print $1 $2}' 

मैंने पाया कि $1 और $2 पिछले रिकॉर्ड से मूल्यों को बरकरार रहती है। क्या यह व्यवहार मानक द्वारा गारंटीकृत है या यह कार्यान्वयन-विशिष्ट है?

+0

मुझे लगता है कि यह कार्यान्वयन-विशिष्ट है। मैंने [spec] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html) में कुछ भी नहीं देखा है जो सीधे बताता है कि फ़ील्ड चर * 'END' ब्लॉक में साफ़ नहीं किया गया है । – chepner

+0

मुझे विशेष रूप से उन क्षेत्रों के लिए कोई संदर्भ नहीं मिल रहा है, लेकिन उदाहरण के लिए 'एनआर' जैसे कई अन्य चर, को अंतिम रिकॉर्ड संसाधित करने के लिए निर्दिष्ट किया गया है, इसलिए यह क्षेत्र में विस्तार करने के लिए पागल नहीं होगा चर भी। –

+1

यह कार्यान्वयन-विशिष्ट है। उदाहरण के लिए देखें कि एचपी-यूएक्स '$ 0' में खाली है। [एचपी-यूएक्स पर अजीब का अंत ब्लॉक व्यवहार] (http://stackoverflow.com/q/29970249/1983854) – fedorqui

उत्तर

8

जाँच हो रही है docs हम देखते हैं कि यह कार्यान्वयन विशेष है:

परंपरागत रूप से, काफी हद तक कार्यान्वयन मुद्दों के कारण, $ 0 और एनएफ समाप्त शासन के अंदर अपरिभाषित थे। POSIX मानक निर्दिष्ट करता है कि एनएफ एक ईएनडी नियम में उपलब्ध है। इसमें अंतिम इनपुट रिकॉर्ड से फ़ील्ड की संख्या शामिल है। संभवतः एक निरीक्षण के कारण, मानक यह नहीं कहता कि $ 0 भी संरक्षित है, हालांकि तर्कसंगत रूप से लगता है कि यह होना चाहिए। वास्तव में, सभी बीडब्ल्यूके awk, mawk, और gawk ईएनडी नियमों में उपयोग के लिए $ 0 के मान को संरक्षित करते हैं। ध्यान रखें, कुछ अन्य कार्यान्वयन और यूनिक्स awk के कई पुराने संस्करण नहीं हैं।

+0

सही। जैसा कि @ फेडोरक्वी ने अपनी टिप्पणी [एचपी-यूएक्स अजीक] में बताया [http://stackoverflow.com/questions/29970249/awks-end-block-behaviour-on-hp-ux), उदाहरण के लिए, वह ऐसा नहीं है जो 'END' अनुभाग में' $ 0', आदि को सुरक्षित रखें। ओपीएस स्क्रिप्ट के लिए कामकाज जिसे मैं एचपी-यूएक्स के साथ किसी को परीक्षण करना चाहता हूं, मैं उम्मीद करता हूं, 'awk' {प्रिंट $ 3; अंतिम = $ 0} अंत {$ 0 = अंतिम; $ 1, $ 2} प्रिंट करें ' –

+0

@EdMorton जो जांचना दिलचस्प होगा, क्योंकि मैं यह देखने के लिए उत्सुक हूं कि 'END' में' 0 0' भी बनाया गया है या नहीं। मेरे जीएनयू में यह अजीब है {0 0 = "ए बी सी"; $ 1} 'फ़ाइल' प्रिंट करें, लेकिन यह नहीं पता कि सभी अजीब स्वादों में क्या होता है। – fedorqui

+0

यह ** ** काम करना चाहिए क्योंकि पीओएसईक्स ने कहा है कि '$ 0 के लिए असाइनमेंट की तरह चीजें ब्ला ब्ला ब्लाह' करती हैं, न कि 'एनडी सेक्शन में किए जाने के अलावा $ 0 को असाइनमेंट' ब्ला ब्ला ब्लाह करता है, लेकिन मैं एक से पुष्टि प्राप्त करना चाहता हूं एक अजीब के साथ परीक्षण करें जो 'END' अनुभाग में' 0 0' को संरक्षित नहीं करता है। –

संबंधित मुद्दे