awk中的绝对值不起作用?

问题描述 投票:21回答:4

我想选择第9列的绝对值小于500的文件行。列有时是正数,有时是负数。

awk -F'\t' '{ if ($9 < |500|) {print $0} }' > output.bam

到目前为止这没有用。互联网上的一轮告诉我要使用我们应该添加的绝对值

func abs(x) { return (x<0) ? x*-1 : x }

那么我怎么想把它与第9列的值一起?我不知道什么是正确的语法..

awk absolute
4个回答
29
投票
awk -F'\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {if (abs($9) < 500) print $0}'

18
投票

对于快速的单行,我使用这种方法:

awk -F'\t' 'sqrt($9*$9) < 500' > output.bam

键入很快,但对于大型作业,我认为sqrt()会对性能造成影响。


3
投票

这太明显了和/或不优雅吗?

awk -F'\t' '$9 < 500 && $9 > -500' > output.bam

1
投票

使用sqrt($ 9 ^ 2)会导致精度损失。如果您想要打印绝对值,这可能是一个问题。

解决方案:以文本形式处理,只需删除前导减号(如果存在)。

这可以保证输出完全匹配输入。

码:

awk '{sub("^-", "", $9); if ($9 < 500) print $9}' inputfile

总结:要使用awk获取绝对值,只需从字段中删除前导减号( - )字符(如果存在)。

© www.soinside.com 2019 - 2024. All rights reserved.