2015-06-14 22 views
2

类似的帖子在这里: awk if statement with simple math用awk减法

下面是伟大的,但现在我需要减去20从外地$ 4如果是小于20,如果该值大于20,场5可以设置为0。

31590,Foo,70,3.5 
28327,Bar,291,14.55 
25155,Baz,583,29.15 
24179,Food,694,34.7 
28670,Spaz,67,3.35 
22190,bawk,4431,132.93 
29584,alfred,142,7.1 
27698,brian,379,18.95 
24372,peter,22,1.1 
25064,weinberger,8,.04 

我有类似的工作,但现在有一些错误。

{print $0, $4-($4>20?$4:20)}

由于场$ 4可小于20,我不知道上面会实际上铁锅,因为我真的希望20 - $ 4中没有$ 4 - 20

这给了我$ 4-20 :{print $0, $4-($4<20?20:$4)}但我需要20-4如果$ 4小于20如果$ 4> 20场$ 5 0

+0

您的文件只有3个字段 – bkmoney

+0

您想要20 - $ 4或$ 4 - 20,您的文章似乎与自己相矛盾 – bkmoney

+0

这给我$ 4-20:{{print $ 0,$ 4 - ($ 4 <20 20: $ 4)}'但如果$ 4小于20则需要20-4。如果$ 4> 20 $ 5为0 –

回答

4

我想你需要的是

{print $0, 20 - ($4 < 20 ? $4 : 20)} 

还是要使其更直接

{print $0, ($4 < 20 ? 20 - $4 : 0)} 

如果$ 4小于20,则返回20 - $ 4作为第五个字段。

如果$ 4大于或等于20,则返回0作为第五个字段。

+0

太简单了!尽管g/awk需要括号外的字段来注册字段,所以我从来没有试过20-!非常感谢。 –

+1

awk不需要任何“注册字段”,它只是评估表达式并将其打印出来,与大多数编程语言相似。 – bkmoney