列9の絶対値が500未満のファイルの行を選択したい。列が正の場合もあれば、負の場合もあります。
awk -F'\t' '{ if ($9 < |500|) {print $0} }' > output.bam
これは今のところ機能しません..インターネット上の1ラウンドで、絶対値を使用するには追加する必要があると言われました
func abs(x) { return (x<0) ? x*-1 : x }
次に、これを列9の値と一緒に配置するにはどうすればよいですか?適切な構文が何であるかわかりません。
awk -F'\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {if (abs($9) < 500) print $0}'
迅速なワンライナーのために、私はこのアプローチを使用します:
awk -F'\t' 'sqrt($9*$9) < 500' > output.bam
入力は簡単ですが、大きなジョブの場合、sqrt()がパフォーマンスに影響を与えると思います。
これは明白すぎますか、エレガントではありませんか?
awk -F'\t' '$9 < 500 && $9 > -500' > output.bam
Sqrt($ 9 ^ 2)を使用すると精度が低下します。絶対値も出力する場合は、問題になる可能性があります。
ソリューション:テキストとして処理し、先頭のマイナス記号があればそれを削除します。
これにより、出力が入力と正確に一致することが保証されます。
コード:
awk '{sub("^-", "", $9); if ($9 < 500) print $9}' inputfile
概要:awkを使用して絶対値を取得するには、フィールドから先頭のマイナス(-)文字を削除します(存在する場合)。