2012-07-27 18 views
23

मेरी स्क्रिप्ट के उत्पादन को छोड़ने के लिए टैब awk का उपयोग कर सीमांकित किया जाता है के रूप में:Awk रिक्त लाइनों

awk -v variable=$bashvariable '{print variable"\t single\t" $0"\t double"}' myinfile.c 

awk आदेश थोड़ी देर के पाश जो चर मूल्य और हर के लिए फ़ाइल myinfile.c अद्यतन करता है में चलाया जाता है चक्र। मुझे इस आदेश के साथ अपेक्षित परिणाम मिल रहे हैं। लेकिन अगर inmyfile.c में एक रिक्त रेखा है (इसमें शामिल हो) है तो यह कोई प्रासंगिक जानकारी प्रिंट नहीं करता है। क्या मैं रिक्त रेखा को अनदेखा करने के लिए awk बता सकता हूं?

मैं जानता हूँ कि यह awk के लिए उस पर पार करने से पहले myinfile.c से रिक्त लाइनों को हटाने के द्वारा किया जा सकता है। मुझे sed और tr रास्ते के ज्ञान में है, लेकिन मैं ऊपर उल्लिखित कमांड में ऐसा करने के लिए awk चाहता हूं और नीचे या एक पाइप वाला एक अलग समाधान नहीं है।

sed '/^$/d' myinfile.c 
tr -s "\n" < myinfile.c 

आपके सुझावों और उत्तरों के लिए अग्रिम धन्यवाद।

उत्तर

38

दो दृष्टिकोण आप लाइनों को फिल्टर करने की कोशिश कर सकते हैं कर रहे हैं: बस अपने आदेश, अर्थात् के शुरू में इन डाल

awk 'NF' data.txt 

और

awk 'length' data.txt 

,

awk -v variable=$bashvariable 'NF { print variable ... }' myinfile 

या

awk -v variable=$bashvariable 'length { print variable ... }' myinfile 

इनमें से दोनों कार्य द्वारपाल/if-statement के रूप में कार्य करते हैं।

पहला दृष्टिकोण केवल उन पंक्तियों को मुद्रित करके काम करता है जहां फ़ील्ड की संख्या (NF) शून्य नहीं है (यानी शून्य से अधिक)।

दूसरी विधि लाइन की लंबाई को देखता है और अगर लंबाई शून्य नहीं है कार्य करता है (जैसे कि, शून्य से अधिक)

आप दृष्टिकोण अपने डेटा/जरूरतों के लिए सबसे उपयुक्त है कि चुन सकते हैं।

awk -v variable=$bashvariable '$0{print variable"\t single\t" $0"\t double"}' myinfile.c 
2

आप इस बाहर की कोशिश कर सकते हो सकता है रिक्त रेखाएं और शेष अजीब मिलान नियमों को छोड़ दें। इसे सभी एक साथ रखो:

awk -v variable=$bashvariable '/^\s*$/ {next;} {print variable"\t single\t" $0"\t double"}' myinfile.c 
1

आज़माएं::

awk -v variable=$bashvariable '/^.+$/{print variable"\t single\t" $0"\t double"}' myinfile.c 
8

तुम बस

/^\s*$/ {next;} 

जोड़ सकता है कि पूर्ति करेंगे, अपनी स्क्रिप्ट के सामने करने के लिए

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