我的意见是:
cat input
1
4
-2
我想从第1列中减去一些值(例如2
)。如果结果是> 0
则打印它,否则打印0
。换句话说,我不想要任何负数。
我的尝试是:
awk '{NUMBER=$1-2} if (NUMBER > 0) print NUMBER; else print 0'
但我可能会犯一些语法错误。
通缉输出是:
0
2
0
答案 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)}'