awk数学:打印前检查结果

awk数学:打印前检查结果,awk,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 这可以是一个选项: $ awk '{$1=$1-2>0?$1-2:0; print $1}' file 0

我的意见是:

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

我的尝试是:

 awk '{NUMBER=$1-2} if (NUMBER > 0) print NUMBER; else print 0'  
但我可能犯了一些语法错误

想要的输出是:

0
2
0
这可以是一个选项:

$ 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

这是一个选项:

$ 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

,如下所示:

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)}'
为此:

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)}'