首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种更干净的方法,在Awk中添加“cleaner”来分配条件,等等?

是否有一种更干净的方法,在Awk中添加“cleaner”来分配条件,等等?
EN

Stack Overflow用户
提问于 2010-09-14 19:55:59
回答 2查看 1K关注 0票数 4

某些语言,如awk脚本,允许有条件的分配。例如,假设您有一个格式的列表文件:

代码语言:javascript
复制
<item name, no spaces> <price as float>

例如:

代码语言:javascript
复制
Grape 4.99
JuicyFruitGum 0.45
Candles 5.99

你想对超过1美元的东西征税.您可以使用awk脚本:

代码语言:javascript
复制
awk '{a=($2>1.00)?$2*1.06:$2; print a}' prices.data

...which使用条件赋值来缩短语法。

但假设你也想提供1美元以上的所有项目和2美元以上的项目超过40美元。好吧,在像c这样的语言中,您通常会做如下的事情:

代码语言:javascript
复制
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或其他脚本语言转换为复合赋值。例如:

代码语言:javascript
复制
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一样,您可能想要很好地描述您令人困惑的语法为后人所做的事情。

EN

回答 2

Stack Overflow用户

发布于 2010-09-14 20:02:28

实际上,C也有?操作符,所以你可以用C做同样的事情。

但是,您实际上是在编写只编写的代码。如果你没有告诉我那句话是怎么回事,那就很难弄清楚了。为什么不继续使用if

当你发现有必要调整它时,你会在6个月内感谢你自己。

票数 0
EN

Stack Overflow用户

发布于 2010-09-14 20:05:42

(a)我想是的

(b)是

碰巧,您的"C“代码几乎是合法的awk。以下稍加修改的版本就像awk程序一样工作得很好.

代码语言:javascript
复制
/./ {
  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)
}

我把分号取出来了,但如果你把分号放在里面就没什么不好的了.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3712380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档