Ответ 1
awk -F'\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {if (abs($9) < 500) print $0}'
Я хочу выбрать строку файла, где абсолютное значение столбца 9 меньше 500. Колонка иногда положительная, иногда отрицательная.
awk -F'\t' '{ if ($9 < |500|) {print $0} }' > output.bam
Это не работает. Один раунд в Интернете сказал мне, что для использования абсолютного значения мы должны добавить
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