स्तंभ प्रिंट करें जो एक विशिष्ट स्ट्रिंग से शुरू होते हैं


11

मेरे पास एक फाइल है जो कुछ इस तरह दिखती है:

ID101     G    T     freq=.5     nonetype     ANC=.1     addinfor
ID102     A    T     freq=.3     ANC=.01    addinfor
ID102     A    T     freq=.01     type=1     ALT=0.022    ANC=.02    addinfor

जैसा कि आप देख सकते हैं, प्रत्येक पंक्ति में स्तंभों की एक अलग संख्या है। मैं विशेष रूप से कॉलम 1, कॉलम 2, कॉलम 3, कॉलम 4 और उस कॉलम को चाहता हूं जो शुरू होता हैANC=

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

ID101     G    T     freq=.5     ANC=.1
ID102     A    T     freq=.3     ANC=.01
ID102     A    T     freq=.01    ANC=.02

मैं आमतौर पर फ़ाइलों को पार्स करने के लिए एक awk कमांड का उपयोग करता हूं:

awk 'BEGIN {OFS = "\t"} {print $1, $2, $3, $4}'

क्या इस तरह की स्थितियों के लिए काम करने के लिए इस कमांड को बदलने का एक आसान तरीका है?

मुझे लगता है कि इस तरह से कुछ काम हो सकता है:

awk '{for(j=1;j<=NF;j++){if($j~/^ANC=/){print $j}}}'

हालाँकि, मैं इसे कैसे संपादित कर सकता हूं यह भी पहले कॉलम को प्रिंट कर सकता है।

जवाबों:


15

के साथ awk:

awk '{for(i=5;i<=NF;i++){if($i~/^ANC=/){a=$i}} print $1,$2,$3,$4,a}' file

  • for(...)सभी क्षेत्रों के माध्यम से छोरों, क्षेत्र 5 ( i=5) के साथ शुरू ।
    • if($i~/^ANC=/) क्षेत्र के साथ शुरू होता है अगर जाँच करता है ANC=
    • a=$i यदि हाँ, चर को उस मान पर सेट करें
  • print $1,$2,$3,$4,aप्रिंट फ़ील्ड 1-4 के बाद जो कुछ भी संग्रहीत है a

BEGIN {OFS="\t"}पाठ्यक्रम के साथ जोड़ा जा सकता है ।


क्या करता i=5है?
cosmictypist

@ stellar01 यह लूप को फील्ड नंबर 5 पर शुरू करता है
अराजकता

0

यह मानते हुए कि ANC=कॉलम हमेशा दूसरा-से-अंतिम कॉलम होता है (उदाहरण डेटा में):

$ awk '{ print $1, $2, $3, $(NF-1) }' data.in
ID101 G T ANC=.1
ID102 A T ANC=.01
ID102 A T ANC=.02

NFफ़ील्ड्स (कॉलम) की संख्या है जो awkप्रत्येक रिकॉर्ड (लाइन) को विभाजित करती है। $(NF-1)दूसरे-से-अंतिम फ़ील्ड का मान है।


0
perl -pale '$"="\t", $_="@{[@F[0..3],         grep {   /^ANC=/ } @F[4..$#F]]}"' yourfile
perl -lane '$,="\t",          print @F[0..3], grep {   /^ANC=/ } @F[4..$#F]'    yourfile
perl -lane '($,,$a)=("\t",0), print grep { $a++ < 4 or /^ANC=/ } @F'            yourfile

संक्षिप्त करें

$, => OFS @F[0..3]=>$F[0] $F[1] $F[2] $F[4]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.