awk スクリプトなどの特定の言語では、条件付きの割り当てが可能です。たとえば、次の形式のリスト ファイルがあるとします。
<item name, no spaces> <price as float>
例えば
Grape 4.99
JuicyFruitGum 0.45
Candles 5.99
そして、1 ドルを超えるものすべてに課税したい場合は、awk スクリプトを使用できます。
awk '{a=($2>1.00)?$2*1.06:$2; print a}' prices.data
...条件付き代入を使用して構文を短縮します。
しかし、$20 を超えるすべてのアイテムに $1 オフ、$40 を超えるアイテムに $2 オフも提供したいとします。c のような言語では、通常、次のようにします。
if (price > 40.00) {
price-=2;
price *= 1.06;
}
else if ( price > 20.00 && price <= 40.00 ) {
price--;
price *= 1.06;
}
else if ( price > 1.00 ) {
price*=1.06;
}
...まあ、awk やその他のスクリプト言語を COMPOUND 割り当てに入れることができることを発見しました。例えば:
awk '{a=($2>1.00)?($2>20.00)?($2-1)*1.06:($2>40.00)?($2-2)*1.06:$2*1.06:$2; print a}' prices.data
私の質問は、
a)複合代入 (このようなもの) は、条件付き代入をサポートするスクリプト言語と一般的に互換性がありますか?
b) awk スクリプトで複数条件付きの割り当てを実行するための非クラッジ方法はありますか?
明確にするために: 私は代入(<...>?<...>:<...>;の省略形についてのみ話している。従来の条件付き代入ではなく、cのような複合代入を行う方法をすでに知っている) Awk スクリプトで. 補足として, なぜ私が省略形を使用するのかについて, メリットは明らかだと思います.短いということ. しかし, 正規表現のように, 混乱した構文が後世のために何をするかについての良い説明を書きたいと思うかもしれません. .