আপনি এটি সেড দিয়ে করতে পারেন, হ্যাঁ, তবে অন্যান্য সরঞ্জামগুলি সহজ। উদাহরণ স্বরূপ:
$ awk '{
printf "%s ", $2;
for(i=3;i<=NF;i++){
printf "%s:%s:1 ",$1,$(i)
}
print ""
}' file
0 565:10:1 565:12:1 565:23:1 565:18:1 565:17:1 565:25:1
1 564:7:1 564:12:1 564:13:1 564:16:1 564:18:1 564:40:1 564:29:1 564:15:1
ব্যাখ্যা
awk প্রতিটি ক্ষেত্র সংরক্ষণ হোয়াইটস্পেস (ডিফল্ট অনুসারে) ইনপুট প্রতিটি লাইন বিভক্ত হবে $1
, $2
, $N
। তাই:
printf "%s ", $2;
২ য় ক্ষেত্র এবং একটি স্থান অনুসরণযোগ্য স্থান মুদ্রণ করবে।
for(i=3;i<=NF;i++){ printf "%s:%s:1 ",$1,$(i) }
: শেষ ক্ষেত্রের 3 ক্ষেত্রগুলিতে পুনরাবৃত্তি হবে (ক্ষেত্রের NF
সংখ্যা) এবং তাদের প্রত্যেকের জন্য এটি 1 ম ক্ষেত্র, ক :
, তারপরে বর্তমান ক্ষেত্র এবং ক মুদ্রণ করবে :1
।
print ""
: এটি কেবল একটি চূড়ান্ত নিউলাইন প্রিন্ট করে।
বা পার্ল:
$ perl -ane 'print "$F[1] "; print "$F[0]:$_:1 " for @F[2..$#F]; print "\n"' file
0 565:10:1 565:12:1 565:23:1 565:18:1 565:17:1 565:25:1
1 564:7:1 564:12:1 564:13:1 564:16:1 564:18:1 564:40:1 564:29:1 564:15:1
ব্যাখ্যা
-a
তোলে perl
মত আচরণ awk
এবং হোয়াইটস্পেস তার ইনপুট বিভক্ত। এখানে ক্ষেত্রগুলি অ্যারেতে সংরক্ষণ করা হয় @F
, যার অর্থ প্রথম ক্ষেত্রটি হবে $F[0]
, দ্বিতীয় $F[1]
ইত্যাদি etc.
print "$F[1] "
: 2 য় ক্ষেত্র প্রিন্ট করুন।
print "$F[0]:$_:1 " for @F[2..$#F];
: শেষ ক্ষেত্রের 3 থেকে ক্ষেত্রগুলিতে পুনরাবৃত্তি করুন ( $#F
অ্যারের উপাদানগুলির সংখ্যা এটি @F
তাই @F[2..$#F]
অ্যারের শেষ পর্যন্ত 3 য় উপাদান থেকে শুরু করে একটি অ্যারের স্লাইস নেয়) এবং 1 ম ক্ষেত্র, ক :
, তারপরে বর্তমান ক্ষেত্র এবং একটি মুদ্রণ করুন :1
।
print "\n"
: এটি কেবল একটি চূড়ান্ত নিউলাইন প্রিন্ট করে।