एक अजीब कमांड में उपयोगकर्ता-सेट चर का उपयोग करना

मैं किसी उपयोगकर्ता द्वारा परिभाषित चर ( $ EVENT , जहां $ EVENT एक फ़ाइल नाम है और टेक्स्टफाइल में एक स्तंभ भी है) के साथ अजीब का उपयोग करने की कोशिश कर रहा हूं, यदि स्थिति में, लेकिन यह चर को पहचानने के लिए प्रतीत नहीं होता है। मैंने ', ", और {और (लेकिन कुछ भी काम करने लगते हैं) के विभिन्न संयोजनों के साथ प्रयास किया है।

घटना = 19971010_1516.txt

awk '{if ($2=="$EVENT") print $3,$4,$8}' FILENAME.txt > output.txt

अजीब कमांड में उपयोगकर्ता परिभाषित चर का उपयोग करना संभव है? यदि हां, तो सिंटैक्स कैसे काम करता है?

1

3 उत्तर

आप सीधे अपने कोड में $ FOO का उपयोग नहीं कर सकते हैं, क्योंकि अजीब सोचता है कि यह कॉलम FOO है। (भोजन परिवर्तनीय है)। लेकिन आपका खाना खाली है। खोल var का उपयोग करने के लिए, -v का उपयोग करें:

awk -v event="$EVENT" '{print event}' file
1
जोड़ा

तुम कर सकते हो:

awk '$2==event {print $3,$4,$8}' event="$EVENT" FILENAME.txt > output.txt

awk -v event="$EVENT" '$2==event {print $3,$4,$8}' FILENAME.txt > output.txt
0
जोड़ा

If you want to include the variable in the awk script literally then you need to enclose the script in double quotes (single quotes do not expand variables). So something like awk '{if ($2=="'"$EVENT"'") print $3,$4,$8}' FILENAME.txt > output.txt'. Which uses single quotes on the rest of the awk script to avoid needing to escape the $ characters but then uses double quotes for the event variable.

That being said you almost certainly want to expose the shell variable to awk as an awk variable which means you want to use the -v flag to awk. So something like awk -vevent="$EVENT" '{if ($2==event) print $3,$4,$8}' FILENAME.txt > output.txt. (Alternatively you could use something like awk '{if ($2==event) print $3,$4,$8}' event="$EVENT" FILENAME.txt > output.txt.)

आप '$ 2 == ईवेंट {प्रिंट $ 3, $ 4, $ 8}' का उपयोग करके अपने अजीब शरीर को थोड़ा सा सरल बना सकते हैं और पैटर्न को जो कुछ करना है उसे करने दें।

0
जोड़ा