2012-08-14 3 views
28
  1. 私はAWKスクリプトを使用していくつかのログを処理しています。
  2. 変数の値がnullまたはが空であるかどうかを確認する必要があります。何かを決定するには、が必要です。

どのように同じを達成するためのアイデアですか?AWKスクリプトの変数値がヌルか空であるかどうかを確認するには?

awk ' 

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

    } 

} 

' File 

私は

1) if(val == "") 

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

は両方のケースでは動作しないで試してみました。それはもう一つの選択肢として

少し奇妙だ、あなたの変数が空/ nullであるゼロならば、あなたは、length()機能を使用できるよう

+0

いくつかのサンプルデータを提供できますか? – Levon

答えて

37

""との比較では、働いているはずです。例えば、

if (length(val) == 0) 

はまた、おそらく組み込み変数NF(フィールドの数)が便利になるだろうか?私たちはあなたの入力データにアクセスすることができないので、言い表せませんが、別の可能性があります。

+0

ありがとう、長さ(val)は私のために働いています。 – samarth

9

それはあなたが変数が空とヌルであることを区別することはできません私

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

のためだけで正常に動作しますが、「未設定」の変数にアクセスすると、awkはちょうどここには""である(デフォルト値で初期化します - 空の文字列)。いくつかの回避策を使用することができます。例えば、0に変数val_accessedを設定し、アクセスすると1に設定することができます。あるいは、より単純なアプローチ(多少「ハッキリ」)を"unitialized"(あるいはあなたのプログラムの実行時には表示されない他の値)に設定してください。

PS:スクリプトが奇妙に見えますが、ネストされた括弧は何ですか?

2

変数を直接比較することなく使用することができます。空白/ゼロ/ゼロの値はfalseとみなされ、それ以外はtrueとみなされます。

こちらをご覧ください:

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

をので、このスクリプトは、ユーザがこのようにそれを呼び出す場合を除き、値devfで変数tagを持っています:

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

これは、のよう当てはまります。 GNU Awk 4.1.3、API:1.1(GNU MPFR 3.1.4、GNU MP 6.1.0)

関連する問題