পার্ল
perl -ne 'print if $.%3==1;$var=$_ if $.%3==2;print $_ . $var if $.%3==0' input.txt
এখানে ধারণাটি হ'ল আমরা %
লাইন নম্বর $.
ভেরিয়েবল সহ মডুলো অপারেটরটি ব্যবহার করি , প্রতিবার প্রথমটি কোনটি প্রতি সেকেন্ডে এবং কোনটি প্রতি তৃতীয় লাইনে is প্রতি তৃতীয় লাইনের জন্য অবশিষ্ট 0 হয়, তবে প্রতি 1 ম এবং 2 য় লাইনের জন্য এটির সংশ্লিষ্ট সংখ্যা থাকবে।
টেস্ট:
$ cat input.txt
gi_1234
My cat is blue.
I have a cat.
gi_5678
My dog is orange.
I also have a dog.
$ perl -ne 'print if $.%3==1;$var=$_ if $.%3==2;print $_ . $var if $.%3==0' input.txt
gi_1234
I have a cat.
My cat is blue.
gi_5678
I also have a dog.
My dog is orange.
গৌণ উন্নতি
একটি ভেরিয়েবলের মধ্যে দ্বিতীয় লাইন সংরক্ষণ করার পদ্ধতির একটি ত্রুটি রয়েছে। শেষ লাইনটি যদি "দ্বিতীয়" এক হয়, তবে সেই রেখার জন্য বাকি 2 হয়? আমার এবং ডোপগোতির উত্তরের মূল কোডটি My dog is orange
আমরা শেষ লাইনটি ছেড়ে দিলে মুদ্রণ করা হবে না । উভয় ক্ষেত্রেই এর END{}
সমাধানটি হ'ল মুদ্রণের পরে অস্থায়ী ভেরিয়েবলটি সেট না করে কোড ব্লক ব্যবহার করা । অন্য কথায়:
$ awk 'NR%3 == 1 { print } NR%3 == 2 { delay=$0 } NR%3 == 0 { print; print delay;delay=""}END{print delay}' input.txt
এবং
$ perl -ne '$s=$_ if $.%3==2;print $_ . $s and $s="" if $.%3==0 or $.%3==1;END{print $s}' input.txt
এই পদ্ধতিতে কোডটি কেবল 3 দ্বারা বিভাজ্য নয়, কোনও ফাইলে স্বেচ্ছাসেবী সংখ্যার জন্য কাজ করবে।
মন্তব্যে উল্লিখিত ইস্যুটির জন্য অতিরিক্ত সমাধান
অজকের ক্ষেত্রে, যদি ফাইলের শেষ লাইনটি 1 এর আউটপুট উত্পাদন করে $ % 3, পূর্ববর্তী কোডটিতে শর্তহীন মুদ্রণের কারণে ফাঁকা নিউলাইন আউটপুট দেওয়ার বিষয়টি রয়েছে END{print delay}
, যেহেতু print
মন্তব্যে উল্লিখিত ফাংশনটি সর্বদা এটি চলমান যা চলকটিতে নিউলাইন যুক্ত করে। perl
সংস্করণের ক্ষেত্রে এই সমস্যাটি দেখা দেয় না, যেহেতু -ne
পতাকা print
ক্রিয়াকলাপটি নতুন লাইন যুক্ত করে না।
তা সত্ত্বেও, ডাব্লু ঘোতি মন্তব্য হিসাবে উল্লিখিত হিসাবে অস্থায়ী পরিবর্তনশীল দৈর্ঘ্য যাচাই করা উচিত হিসাবে শর্তসাপেক্ষে ডেকে আউট করার ক্ষেত্রে স্থির করা হয়। একই ফিক্সের পার্ল সংস্করণটি হ'ল:
$ perl -ne '$s=$_ if $.%3==2;print $_ . $s and $s="" if $.%3==0 or $.%3==1;END{print $s if length $s}' input.txt