某些语言,如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...which使用条件赋值来缩短语法。
但假设你也想提供1美元以上的所有项目和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脚本中进行多条件赋值的非特定方式?
澄清:--我只谈论赋值的缩写(<...>?<...>:<...>;,而不是传统的条件赋值,我已经知道如何在Awk脚本中为它做类似c的复合赋值了。顺便提一下,为什么我会用速记,我认为它的优点是显而易见的--它很短。但是像regexes一样,您可能想要很好地描述您令人困惑的语法为后人所做的事情。
发布于 2010-09-14 20:02:28
实际上,C也有?操作符,所以你可以用C做同样的事情。
但是,您实际上是在编写只编写的代码。如果你没有告诉我那句话是怎么回事,那就很难弄清楚了。为什么不继续使用if
当你发现有必要调整它时,你会在6个月内感谢你自己。
发布于 2010-09-14 20:05:42
(a)我想是的
(b)是
碰巧,您的"C“代码几乎是合法的awk。以下稍加修改的版本就像awk程序一样工作得很好.
/./ {
price = $1
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
}
printf("%6.2f\n", price)
}我把分号取出来了,但如果你把分号放在里面就没什么不好的了.
https://stackoverflow.com/questions/3712380
复制相似问题