2012-06-25 27 views
20

9 sütununun mutlak değerinin 500'den küçük olduğu bir dosya satırı seçmek istiyorum. Sütun bazen pozitif, bazen de negatiftir. Bu işe yaramazsaawk Mutlak değeri çalışmıyor?

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

şimdiye kadar .. internette bir yuvarlak biz Ardından

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

eklemek gerekir mutlak değeri kullanmak söyledi nasıl değer ile birlikte bu koymak varsayalım duyuyorum sütun 9? Adam gibi bir söz dizimi ne olabilir bilmiyorum .. hızlı tek gömlekleri için

cevap

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

Bunu bir tek liner yerine bir çok astar olarak görmek isterdim, ama ne işe yarayacak. –

17

, ben bu yaklaşımı kullanın:

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

Bu tip hızlı, ama büyük işler için, ben d sqrt() 'ın bir performans isabeti getireceğini hayal edin.

+1

'{print}' ima ediliyorsa, bu bölümü bırakabilirsiniz. –

+5

+1; hafif sadeleştirme: 'sqrt ($ 9^2)' (üstel '' '' '' '' '' '' '' '' '' '' '' ın yerine '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'not '' not '' not POSIX uyumlu değildir. – mklement0

1

Bu çok açık ve/veya zarif değil mi?

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