質問 |
||
| 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つを分ける処理を教えて下さい。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |