Подтвердить что ты не робот

Абсолютное значение в awk не работает?

Я хочу выбрать строку файла, где абсолютное значение столбца 9 меньше 500. Колонка иногда положительная, иногда отрицательная.

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

Это не работает. Один раунд в Интернете сказал мне, что для использования абсолютного значения мы должны добавить

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

Затем, как я полагаю, чтобы поставить это вместе со значением столбца 9? Я не знаю, какой может быть правильный синтаксис.

4b9b3361

Ответ 1

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

Ответ 2

Для быстрых однострочных я использую этот подход:

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

Быстро напечатать, но для больших заданий я бы предположил, что sqrt() наложит удар по производительности.

Ответ 3

Является ли это слишком очевидным и/или не элегантным?

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