2012-06-25 37 views
20

列9の絶対値が500未満のファイルの行を選択したいと考えています。これは動作しませんawkの絶対値は機能しませんか?

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

は、これまで...インターネット上の1ラウンドはそれは我々が次に

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

を追加する必要があり、絶対値を使用するように私に言ったどのように私は値と一緒にこれを置くことを想定しています列9の?私は、適切な構文何ができるか分からない...迅速なワンライナーのために

答えて

27
awk -F'\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {if (abs($9) < 500) print $0}' 
+3

私は1ライナーの代わりにマルチライナーを見るのが好きですが、何が必要なのでしょうか。 –

17

、私はこのアプローチを使用します。

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

それは、素早く入力できますが、大きな仕事のために、私は」 sqrt()がパフォーマンスヒットを引き起こすと想像してください。

+1

'{print}'が暗示されている場合、その部分を削除することができます。 –

+5

+1;わずかな単純化: 'sqrt($ 9^2)'(べき乗のために '**'ではなく '^'の使用に注意してください - '**'はPOSIXに準拠していません)。 – mklement0

1

これはあまりにも明白ではありませんか?

awk -F'\t' '$9 < 500 && $9 > -500' > output.bam 
関連する問題