जब मैं चाहता हूं कि वैरिएबल प्रिंट करने के लिए awk पूरी लाइन क्यों प्रिंट करता है?


24

जब मैं टाइप करता हूं:

echo "foo bar" | gawk -v var="content" '{print $var}'

मुझे उम्मीद है कि आउटपुट होगा content। क्यों है foo bar?



वास्तव में। मैं बैश सिंटैक्स के साथ भ्रमित हो गया ...
निको

यह एक अच्छा सवाल है और हालांकि जवाब से पता चलता है कि $गलत तरीके से गलत किया गया था, मुझे यकीन नहीं है कि इसे टाइपो के रूप में बंद किया जाना चाहिए। मैं इनमें से कई हाल ही में देखा है तो शायद हम एक विहित एक की जरूरत है
roaima

जवाबों:


45

चर के रूप में नाम से संदर्भित कर रहे हैं varनहीं, $varमें awkवें क्षेत्र$n को संदर्भित करता है : पहले क्षेत्र के लिए, दूसरे के लिए ... या पूरे रिकॉर्ड के लिए == 0 ( पूर्ण रिकॉर्ड है)।n $1$2n$0

जिनकी शाब्दिक संख्या नहीं है। आप उपयोग कर सकते हैं $(1+1)या $variable। यदि variableशामिल है 1, तो $variableपहला क्षेत्र होगा। आमतौर पर इस्तेमाल किया जाने वाला एक $NFअंतिम क्षेत्र के लिए है ( NFविशेष चर है जिसमें फ़ील्ड की संख्या होती है)।

यदि, आपके उदाहरण की तरह, चर में कोई संख्या नहीं है, तो गैर-संख्या को 0 के रूप में समझा जाता है।

तो var="content"; print $var, जैसा है वैसा ही है var=0; print $var, और इस प्रकार, जैसा print $0कि पूरा रिकॉर्ड है।

आप यहाँ क्या चाहते हैं:

echo "foo bar" | gawk -v var="content" '{print var}'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.