2012-08-14 16 views
28
  1. मैं कुछ लॉग संसाधित करने के लिए AWK स्क्रिप्ट का उपयोग कर रहा हूं।
  2. एक स्थान पर मुझे यह जांचने की आवश्यकता है कि परिवर्तनीय मान शून्य या खाली कुछ निर्णय लेने के लिए है या नहीं।

कोई विचार यह कैसे प्राप्त करें?कैसे जांचें कि AWK स्क्रिप्ट में परिवर्तनीय मान शून्य या खाली है या नहीं?

awk ' 

{ 
    { 
     split($i, keyVal, "@") 
     key=keyVal[1]; 
     val=keyVal[2]; 
     if(val ~ /^ *$/) 
     val="Y"; 

    } 

} 

' File 

मैं

1) if(val == "") 

2) if(val ~ /^ *$/) 

दोनों ही मामलों में काम नहीं कर के साथ की कोशिश की है।

+0

क्या आप कुछ नमूना डेटा प्रदान कर सकते हैं? – Levon

उत्तर

37

"" के साथ तुलना काम किया जाना चाहिए था, ताकि थोड़ा अजीब

एक और विकल्प के रूप में, आप length() समारोह का उपयोग कर सकते है, शून्य हैं, तो आपके चर रिक्त है/खाली। जैसे,

if (length(val) == 0) 

इसके अलावा, शायद अंतर्निहित वैरिएबल NF (फ़ील्ड की संख्या) काम में आ सकता है? चूंकि हमारे पास आपके इनपुट डेटा तक पहुंच नहीं है, हालांकि यह कहना मुश्किल है, लेकिन एक और संभावना है।

+0

धन्यवाद, लंबाई (वैल) मेरे लिए काम कर रही है। – samarth

9

यह मेरे

$ awk 'BEGIN{if(val==""){print "null or empty"}}' 
null or empty 

आप चर खाली और अशक्त होने के बीच अंतर नहीं कर सकते हैं के लिए बस ठीक काम करता है, जब आप का उपयोग "सेट नहीं" चर, awk बस डिफ़ॉल्ट मान के साथ आरंभ (यहां यह "" है - खाली स्ट्रिंग)। आप कुछ प्रकार के वर्कअराउंड का उपयोग कर सकते हैं, उदाहरण के लिए, val_accessed वैरिएबल 0 और फिर जब आप इसे एक्सेस करते हैं तो 1 पर सेट करें। या अधिक सरल दृष्टिकोण (कुछ हद तक "हैकिश") "unitialized" पर वैल सेटिंग (या कुछ अन्य मान जो आपके प्रोग्राम को चलाने पर प्रकट नहीं हो सकते हैं)।

पीएस: आपकी स्क्रिप्ट मेरे लिए अजीब लगती है, के लिए नेस्टेड ब्रैकेट क्या हैं?

2

आप सीधे तुलना के बिना चर का उपयोग कर सकते हैं, खाली/शून्य/शून्य मान false माना जाता है, बाकी सब कुछ true है।

यहाँ देखें:

# setting default tag if not provided 
if (! tag) { 
     tag="devf" 
} 

तो इस स्क्रिप्ट को छोड़कर उपयोगकर्ता इसे इस तरह फोन करता है, तो मूल्य devf साथ चर tag होगा:

$ awk -v tag=custom -f script.awk targetFile 

इस के रूप में सही है: जीएनयू Awk 4.1.3, API: 1.1 (जीएनयू एमपीएफआर 3.1.4, जीएनयू एमपी 6.1.0)

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