Некоторые языки, такие как сценарий 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
... который использует условное присваивание для сокращения синтаксиса.
Но, скажем, вы хотели также предложить $ 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 или другие языки сценариев в назначение 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) Существует ли не-kludge способ сделать многоусловное назначение в сценарии awk?
Чтобы уточнить: Я говорю исключительно о сокращении для назначения (<...>? <...>: <...>; нетрадиционное условное присваивание, о котором я уже знаю, как выполнять c-подобные составные присваивания в сценарии Awk. В качестве примечания, почему яЯ мог бы использовать сокращение, я думаю, что заслуга очевидна - что он короткий. Но, как и регулярные выражения, вы можете написать хорошее описание того, что ваш запутанный синтаксис делает для потомков.