24

ファイルの 9 列目の絶対値が 500 未満の行を選択したいのですが、列が正の場合と負の場合があります。

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

これは今のところうまくいきません..インターネット上のあるラウンドでは、絶対値を使用するには追加する必要があると言われました

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

では、これを列 9 の値と一緒にどのように配置すればよいでしょうか?? 適切な構文が何であるかわかりません..

4

4 に答える 4

34
awk -F'\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {if (abs($9) < 500) print $0}'
于 2012-06-25T07:20:57.673 に答える
20

簡単なワンライナーについては、次のアプローチを使用します。

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

入力するのは簡単ですが、大規模なジョブの場合、sqrt() はパフォーマンスに影響を与えると思います。

于 2013-11-13T15:09:26.843 に答える
4

これはあまりにも明白であり、エレガントではありませんか?

awk -F'\t' '$9 < 500 && $9 > -500' > output.bam
于 2015-05-22T17:23:24.580 に答える