次のような場合は、awkにさらに変数を設定してください。

次のような場合は、awkにさらに変数を設定してください。

次の簡単なテストでは、両方の変数にエラーが発生します。

$ echo test|awk '{$2 != ""? o="ABC" r="123" : o="123 r="ABC"}END{print "o:"o" r:"r}'
awk: cmd. line:1: {$2 != ""? o="ABC" r="123" : o="123 r="ABC"}END{print "o:"o" r:"r}
awk: cmd. line:1:                     ^ syntax error
awk: cmd. line:1: {$2 != ""? o="ABC" r="123" : o="123 r="ABC"}END{print "o:"o" r:"r}
awk: cmd. line:1:                                                         ^ syntax error
awk: cmd. line:1: {$2 != ""? o="ABC" r="123" : o="123 r="ABC"}END{print "o:"o" r:"r}
awk: cmd. line:1:                                                                ^ unterminated string
$

単一変数の場合はうまく機能します。

$ echo test|awk '{$1 != ""? o="ABC" : o="123"}END{print "o:"o}'
o:ABC
$ echo test|awk '{$2 != ""? o="ABC" : o="123"}END{print "o:"o}'
o:123

答え1

演算子を使用すると、実際にこれを行うことはできません。? :演算子は単一の値しか処理できず、2つの割り当てで2つの値が生成されるためです。

代わりに実際のifステートメントを使用してください。

$ echo test|awk '{ if ($2 != "") { o="ABC"; r="123" } else { o="123"; r="ABC" }} END{ print "o:"o" r:"r}'
o:123 r:ABC

関連情報