2016-11-27 11 views
6

मेरे पास 20 000 जांच के साथ एक डेटासेट है, वे दो कॉलम, 21nts प्रत्येक में हैं। इस फ़ाइल से मुझे उन पंक्तियों को निकालने की आवश्यकता है जिनमें प्रोब 1 कॉलम में अंतिम न्यूक्लियोटाइड प्रोब 2 कॉलम में अंतिम न्यूक्लियोटाइड से मेल खाता है। अब तक मैंने एडब्ल्यूके (सबस्ट्र) फ़ंक्शन की कोशिश की, लेकिन अपेक्षित परिणाम नहीं मिला। यहाँ एक लाइनर मैंने कोशिश की है:Awk: एक पंक्ति में दो तारों की तुलना कैसे करें

awk '{if (substr($2,21,1)==substr($4,21,1)){print $0}}' 

एक अन्य विकल्प कॉलम 2 और 4 (awk '$2~/[A-Z]$/) के अंतिम वर्ण एंकर करने के लिए होगा, लेकिन मैं एक तरह से regex का उपयोग कर दो कॉलम में जांच मेल करने के लिए नहीं मिल रहा। सभी सुझावों और टिप्पणियों की बहुत सराहना की जाएगी। डेटासेट के

उदाहरण:

 Probe 1      Probe 2 
4736 GGAGGAAGAGGAGGCGGAGGA A GGAGGACGAGGAGGAGGAGGA 
4737 GGAGGAAGAGGAGGGAGAGGG B GGAGGACGAGGAGGAGGAGGG 
4738 GGAGGATTTGGCCGGAGAGGC C GGAGGAGGAGGAGGACGAGGT 
4739 GGAGGAAGAGGAGGGGGAGGT D GGAGGACGAGGAGGAGGAGGC 
4740 GGAGGAAGAGGAGGGGGAGGC E GGAGGAGGAGGACGAGGAGGC 

वांछित उत्पादन:

4736 GGAGGAAGAGGAGGCGGAGGA A GGAGGACGAGGAGGAGGAGGA 
4737 GGAGGAAGAGGAGGGAGAGGG B GGAGGACGAGGAGGAGGAGGG 
4740 GGAGGAAGAGGAGGGGGAGGC E GGAGGAGGAGGACGAGGAGGC 
+4

आपके द्वारा वर्णित 'awk' उदाहरण पहले से ही वांछित आउटपुट उत्पन्न करता है जिसे आपने वर्णित किया है। आपको और क्या चाहिए? – janos

+0

यह वास्तव में काम करता है, भ्रम के लिए खेद है। – Bio21

उत्तर

5

इस इनपुट फिल्टर करेगा, लाइनों मिलान जहां 2 कॉलम के अंतिम चरित्र 4 का अंतिम वर्ण के बराबर है स्तंभ:

awk 'substr($2, length($2), 1) == substr($4, length($4), 1)' 

क्या मैं अपने नमूना स्क्रिप्ट की तुलना में परिवर्तन किया गया:

  • if बयान { ... } ब्लॉक से बाहर एक फिल्टर
  • उपयोग length($2) और length($4) में बजाय मूल्य 21
  • { print $0 } की जरूरत नहीं है हार्डकोड की, के रूप में है कि मेल लाइनों के लिए डिफ़ॉल्ट क्रिया है हटो
संबंधित मुद्दे