2012-08-14 1 views
28
  1. Ich verwende AWK Skript, um einige Protokolle zu verarbeiten.
  2. An einer Stelle muss ich überprüfen, ob der Variablenwert null oder leer ist, um eine Entscheidung zu treffen.

Irgendeine Idee, wie man dasselbe erreicht?Wie überprüft man, ob der Variablenwert im AWK-Skript null oder leer ist?

awk ' 

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

    } 

} 

' File 

Ich habe versucht, mit

1) if(val == "") 

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

nicht in beiden Fällen arbeiten.

+0

Können Sie einige Beispieldaten zur Verfügung stellen? – Levon

Antwort

37

Der Vergleich mit "" sollte gearbeitet, so dass ein bisschen

Als eine weitere Alternative ungerade ist, können Sie die length() Funktion, wenn Null verwenden könnten, Ihre Variable ist null/leer. Z. B.

if (length(val) == 0) 

auch vielleicht die integrierte Variable NF (Anzahl der Felder) könnte sich als nützlich erweisen? Da wir keinen Zugriff auf Ihre Eingabedaten haben, ist es schwer zu sagen, aber eine andere Möglichkeit.

+0

Danke, Länge (val) funktioniert für mich. – samarth

9

Es funktioniert für mich ganz gut

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

Sie können nicht unterscheiden zwischen Variable leer und null ist, wenn Sie „nicht gesetzt“ Variable zugreifen, awk initialisiert es nur mit Standardwert (hier ist es "" - leerer String). Sie können eine Art Problemumgehung verwenden, z. B. val_accessed Variable auf 0 und dann auf 1, wenn Sie darauf zugreifen. Oder einfacherer Ansatz (etwas "hackisch"), der val auf "unitialized" setzt (oder auf einen anderen Wert, der beim Ausführen Ihres Programms nicht angezeigt werden kann).

PS: Ihr Skript sieht für mich seltsam aus, wofür sind die verschachtelten Klammern?

2

Sie können die Variable ohne Vergleich direkt verwenden, ein leerer/null/null-Wert wird als false betrachtet, alles andere ist true.

Siehe hier:

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

Also das Skript die Variable tag mit dem Wert devf außer haben wird, wenn der Benutzer es so nennen:

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

Dies gilt ab: GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)