• 締切済み

NULLの判定について

ファイルaaaの内容が 0,, の時、 cat "aaa" | awk -F , ' BEGIN{ } { if ($1 != NULL){ printf("%s\n","ROUTE1"); } else{ printf("%s\n","ROUTE2"); } } END{ }'>RSL-aaa を実行すると、ROUTE2を通過します。 0についても、NULLとみなされてしまう のでしょうか。 $2,$3については、ROUTE2を $1については、ROUTE1を通過させるには どうしたらよろしいのでしょうか。 お願いします。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

フィールドが空なのか、数値が0なのかを判別したいのなら数値との比較を行ってはいけません。 なぜなら空文字列が数値として評価され、結果として0になってしまうからです。 ということでこう。 { for (i=1; i<=NF; i++) { printf "フィールド %dは", i if ($i == "") print "空です" else if ($i == 0) print "0です" else print $i, "です" } } >echo 1,3,,5,0,9|gawk-3.1.6\gawk -F, -f hoge.awk フィールド 1は1 です フィールド 2は3 です フィールド 3は空です フィールド 4は5 です フィールド 5は0です フィールド 6は9 です

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

awk ではNULLは特別なものじゃないので普通の変数に解釈されます。 で、awkの変数の初期値は数値としては 0になりますので >if ($1 != NULL){ $1が0以外の数値もしくは、空でないフィールドの場合にこのifの判定は 真になります。 >$2,$3については、ROUTE2を >$1については、ROUTE1を通過させるには 何がやりたいのかよくわかりません。 フィールドに対して暗黙のループはありませんけど、もう少し具体的な 条件を示してもらえますか?

taka394
質問者

補足

・空のフィールド と ・数値0のフィールド の処理を分けようと思いますが、 うまくいきません。 2つを分ける処理を教えて下さい。

関連するQ&A