2012-03-04 21 views
9

मैं एक खोल स्क्रिप्ट जो awk लाइनों

awk लाइन लग रहा है की एक जोड़ी भी शामिल है writting हूँ की तरह:

cat input.csv | awk -F, '$1~/$1/ {print "is good"}' 

पहले $1 का पहला स्तंभ है इनपुट csv, दूसरा $1 इस खोल स्क्रिप्ट

मैं दूसरे $ के सामने एक \ डालने की कोशिश की के पहले कमांड लाइन इनपुट माना जाता है, लेकिन यह प्रतीत हो रहा है काम नहीं कर रहा।

क्या कोई मदद कर सकता है?

उत्तर

5
cat input.csv | awk -F, '$1~/'"$1"'/ {print "is good"}' 

आप ' स्ट्रिंग बंद करने के लिए, (वहाँ विशेष वर्णों को मामले में " अंदर) खोल $1 डालें, तो ' स्ट्रिंग को फिर से खोलने की जरूरत है।

और आप यह जांचना चाहेंगे कि $1 शैल से / वर्ण हैं जो नियमित अभिव्यक्ति को परेशान करेंगे।

और जैसा कि @Ignacio वेज़क्वेज़-अब्राम संकेत दिया, आप पाइप के लिए awk को cat के उत्पादन की जरूरत नहीं है, तो आप सिर्फ awk सीधे फाइल पढ़ने में मिल सकता है। यही कारण है:

cat input.csv | awk ... 

को सरल किया जा सकता:

awk ... < input.csv 
+1

यह वास्तव में फ़ाइल को पढ़ने के लिए अजीब नहीं बताता है। यह शैल को सीधे बिल्ली का उपयोग करने के बजाय अजीब के stdin में इसे खिलाने के लिए कहता है। –

+0

@Ignacio Vazquez-Abrams: मुझे पता है, लेकिन मैं बहुत अधिक जटिलता में नहीं जाना चाहता था। –

+0

@ IgnacioVazquez-Abrams पुनर्निर्देशन "इसे सीधे awk के stdin में फ़ीड" नहीं करता है। फ़ाइल * * अजीब stdin बन जाता है। बिल्ली का बेकार उपयोग फ़ाइल की सामग्री को अजीब स्टडीन में खिलाता है, और बेकार I/O यही कारण है कि यूयूओसी अक्षम है। –

4

एक चर भी ठीक है।

awk -F, -v needle="$1" '$1 ~ needle {print "is good"}' < input.csv 
+0

अतिरिक्त चर के बारे में अच्छा विचार। मुझे लगता है कि किसी भी समस्या को समाप्त करता है जहां '$ 1' में विशेष वर्ण हो सकते हैं, है ना? –

+5

प्रत्येक चरित्र अपने तरीके से विशेष है। –

1

बिल्ली या पुनर्निर्देशन की आवश्यकता नहीं है। बैकस्लैश का उपयोग करके एक तीसरा संस्करण यहां दिया गया है:

awk -F, "\$1~/$1/ {print \"is good\"}" input.csv 
संबंधित मुद्दे