जवाबों:
एक awk
कार्यक्रम हालत-एक्शन जोड़े की एक श्रृंखला है, घुंघराले ब्रेस के बाहर स्थितियां और उनमें संलग्न होने वाली क्रियाएं। एक शर्त को झूठा माना जाता है यदि यह शून्य या खाली स्ट्रिंग का मूल्यांकन करता है, तो कुछ भी सही है (संदर्भ के आधार पर, अनइंस्टॉल किए गए चर शून्य या खाली स्ट्रिंग हैं, इसलिए वे झूठे हैं)। या तो एक शर्त या एक कार्रवाई निहित हो सकती है; बिना किसी शर्त के ब्रेसिज़ (जैसा कि आपका शुरू होता है) को एक सच्ची स्थिति माना जाता है और हमेशा मार डाला जाता है अगर वे हिट हो जाते हैं, और बिना किसी शर्त के लाइन को प्रिंट करेंगे यदि और केवल तभी शर्त पूरी होती है।
1
तो यह हर पंक्ति के लिए डिफ़ॉल्ट क्रिया निष्पादित करता है, लाइन (जो कोष्ठकों में पिछली कार्रवाई के द्वारा संशोधित किया जा सकता है) मुद्रण अपनी स्क्रिप्ट के अंत में, एक शर्त (हमेशा सच) कोई कार्रवाई नहीं की है।
मैं वास्तव में इस प्रकार के शॉर्टकटों को नापसंद करता हूं क्योंकि यह बाधा डालता है और भ्रमित करता है कि यह कैसे पार्स किया जा रहा है। जब आप ऐसा कुछ पढ़ते हैं awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
, तो आप सोच सकते हैं कि 1
पिछले कथन को संशोधित कर रहा है। या आप सोच सकते हैं कि इसके 1
लिए एक उपनाम है {print}
, जो तकनीकी रूप से सही नहीं है।
वास्तव में, 1
एक पूरी तरह से अलग बयान है। आप इस तरह से बयानों को अलग कर सकते हैं:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'
प्रत्येक awk स्टेटमेंट फॉर्मेट है condition {action}
। यदि कोई नहीं {action}
दिया गया है, तो डिफ़ॉल्ट कार्रवाई है {print}
। (यदि कोई नहीं condition
दिया गया है, तो डिफ़ॉल्ट स्थिति है true
)
तो यहाँ, 1
वह स्थिति है, जो हमेशा मूल्यांकन करती है true
क्योंकि यह नॉनज़रो है। action
छोड़ दिया जाता है, ताकि डिफ़ॉल्ट {print}
किया जाता है। आप इसे इस तरह से सोच सकते हैं:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'