2013-10-18 23 views
0

我輸入的是: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 

回答

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

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