ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3949975 NULLの判定について
質問者:taka394 ファイル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を通過させるには
どうしたらよろしいのでしょうか。
お願いします。
困り度:
  • すぐに回答を!
質問投稿日時:
08/04/15 02:26
最新から表示回答順に表示

回答

ANo.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
種類:回答
どんな人:経験者
自信:参考意見
回答日時:
08/04/19 17:18
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 awk ではNULLは特別なものじゃないので普通の変数に解釈されます。
で、awkの変数の初期値は数値としては 0になりますので

>if ($1 != NULL){

$1が0以外の数値もしくは、空でないフィールドの場合にこのifの判定は
真になります。

>$2,$3については、ROUTE2を
>$1については、ROUTE1を通過させるには

何がやりたいのかよくわかりません。
フィールドに対して暗黙のループはありませんけど、もう少し具体的な
条件を示してもらえますか?
回答者:sakusaker7
種類:補足要求
どんな人:経験者
自信:参考意見
回答日時:
08/04/15 03:07
この回答への補足・空のフィールド

・数値0のフィールド
の処理を分けようと思いますが、
うまくいきません。

2つを分ける処理を教えて下さい。
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示