2012-06-25 12 views
20

मैं एक फ़ाइल की रेखा का चयन करना चाहता हूं जहां कॉलम 9 का पूर्ण मूल्य 500 से कम है। कॉलम कभी-कभी सकारात्मक होता है, कभी-कभी नकारात्मक होता है।अजीब में पूर्ण मूल्य काम नहीं करता है?

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

यह काम नहीं करता अब तक .. इंटरनेट पर एक दौर मुझे उस निरपेक्ष मान का उपयोग करने के हम तो फिर

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

मैं इसे एक लाइनर के बजाय बहु-लाइनर के रूप में देखना पसंद करूंगा, लेकिन वहां क्या काम करना चाहिए। –

17

त्वरित एक-लाइनर्स के लिए, मैं इस दृष्टिकोण का उपयोग:

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

यह टाइप करने के लिए जल्दी हो जाता है, लेकिन बड़े नौकरियों के लिए, मैं डी कल्पना करें कि sqrt() एक प्रदर्शन हिट लगाएगा।

+1

'{print}' निहित है, आप उस भाग को छोड़ सकते हैं। –

+5

+1; मामूली सरलीकरण: 'sqrt ($ 9^2)' (एक्सपोनिएशन के लिए '**' के बजाय '^' के उपयोग पर ध्यान दें - '**' POSIX-compliant नहीं है)। – mklement0

1

क्या यह बहुत स्पष्ट और/या सुरुचिपूर्ण नहीं है?

awk -F'\t' '$9 < 500 && $9 > -500' > output.bam 
संबंधित मुद्दे