awk math:打印前检查结果

时间:2013-10-18 13:34:41

标签: awk

我的意见是:

cat input  
   1  
   4  
  -2

我想从第1列中减去一些值(例如2)。如果结果是> 0则打印它,否则打​​印0。换句话说,我不想要任何负数。

我的尝试是:

 awk '{NUMBER=$1-2} if (NUMBER > 0) print NUMBER; else print 0'  

但我可能会犯一些语法错误。

通缉输出是:

0
2
0

2 个答案:

答案 0 :(得分:3)

这可以是一个选项:

$ awk '{$1=$1-2>0?$1-2:0; print $1}' file
0
2
0

$1=$1-2>0?$1-2:0是三元运算符,如下所示:

Set $1 to:

    if ($1-2 > 0)
         ==> $1-2
    else ==> 0

然后打印出print $1

答案 1 :(得分:2)

有了这个:

awk '{NUMBER=$1-2} if (NUMBER > 0) print NUMBER; else print 0'

你将if...语句放在awk正文的条件部分而不是动作部分,因为它没有用大括号括起来。这是您所写内容的正确语法:

awk '{NUMBER=$1-2; if (NUMBER > 0) print NUMBER; else print 0}'

但实际上我会把它写成:

awk '{NUMBER=$1-2; print (NUMBER > 0 ? NUMBER : 0)}'