Некоторые языки, такие как скрипт awk, допускают условные присваивания. Например, предположим, что у вас есть файл списка в формате:
<item name, no spaces> <price as float>
e.g.
Grape 4.99
JuicyFruitGum 0.45
Candles 5.99
И вы хотели обложить налогом все, что превышает 1 доллар... вы могли бы использовать awk-скрипт:
awk '{a=($2>1.00)?$2*1.06:$2; print a}' prices.data
... который использует условное присваивание для сокращения синтаксиса.
Но скажем, вы хотели также предложить 1 доллар на все товары дороже 20 долларов и 2 доллара на товары дороже 40 долларов. Что ж, на таком языке, как 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 или другие языки сценариев в составное назначение. например.:
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. В качестве примечания, почему я могу использовать стенографию, я думаю, что ее достоинство очевидно — она короткая. Но, как и в случае с регулярными выражениями, вы можете написать хорошее описание того, что ваш запутанный синтаксис делает для потомков.