নির্দিষ্ট স্ট্রিং দিয়ে শুরু হওয়া কলামগুলি মুদ্রণ করুন


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 '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"}অবশ্যই একত্রিত করা যেতে পারে ।



@ স্টেলার ০১ এটি ৫ নম্বর ক্ষেত্রের লুপটি শুরু করে
বিশৃঙ্খলা

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

NFawkপ্রতিটি ক্ষেত্রের (কলাম) সংখ্যা যা প্রতিটি রেকর্ড (রেখা) কে বিভক্ত করে। $(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]

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.