0

我的输入是:

cat input  
   1  
   4  
  -2

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

我的尝试是:

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

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

想要的输出是:

0
2
0
4

2 回答 2

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

于 2013-10-18T13:38:09.947 回答
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)}'
于 2013-10-18T14:14:27.970 回答