awk中的绝对值不起作用?

mad*_*tty 22 awk absolute

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

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

到目前为止这不起作用..互联网上的一轮告诉我要使用我们应该添加的绝对值

func abs(x) { return (x<0) ? x*-1 : x }
Run Code Online (Sandbox Code Playgroud)

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

Kan*_*ane 30

awk -F'\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {if (abs($9) < 500) print $0}'
Run Code Online (Sandbox Code Playgroud)

  • 我更愿意看到它是一个多线程而不是单线,但是应该有什么用. (3认同)

The*_*igo 18

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

awk -F'\t' 'sqrt($9*$9) < 500' > output.bam
Run Code Online (Sandbox Code Playgroud)

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

  • +1; 稍微简化:`sqrt($ 9 ^ 2)`(注意使用`^`而不是'**`进行求幂 - `**`不符合POSIX标准). (5认同)