প্রতি 50 লাইনের মধ্যে 15 এবং 25 নম্বর লাইনের কীভাবে প্রিন্ট করবেন?


9

আমার কাছে একটি বড় ফাইল আছে এবং আমি প্রতিটি ক্রমিক 50 লাইন, 15 এবং 25 তম লাইন থেকে মুদ্রণ করতে চাই ।

sed -n '15,25p' inputfile

কেবলমাত্র 15 এবং 25 লাইনগুলি প্রিন্ট করতে এবং ফাইলের প্রতিটি 50 টি লাইনের উপরে লুপ করতে কীভাবে এই আদেশটি পরিবর্তন করতে হবে।

উত্তর:


22
awk 'NR % 50 == 15 || NR % 50 == 25'

স্পষ্টভাবে বহনযোগ্য উপায় হবে।

একটি জিএনইউ sedবিকল্প নোট করুন :

sed '15~50b;25~50b;d'

যে কোনও সহ sed, আপনি সর্বদা এটি করতে পারেন:

sed -n 'n;n;n;n;n;n;n;n;n;n;n;n;n;n;p;n;n;n;n;n;n;n;n;n;n;p;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n'

(পরের লাইনটি 14 বার, মুদ্রণ করুন, পরবর্তী লাইনটি 10 ​​বার, মুদ্রণ করুন, পরবর্তী লাইনটি 25 বার, পরবর্তী চক্রের দিকে ফিরে আসুন (যা অনুপস্থিত অতিরিক্ত রেখাটি 50 করার জন্য ধরবে))।


10

এটি একটি কাজ awk

awk '(NR%50==15) || (NR%50==25)' inputfile

সম্পাদনা: ওপিতে শিষ্ট নির্দেশ দ্বারা আমি বিভ্রান্ত হয়েছিলাম।


9

সঙ্গে perl

1) awkসমাধান অনুরূপ , $.ভেরিয়েবল স্টোর লাইন নম্বর

$ seq 135 | perl -ne 'print if $.%50==15 || $.%50==25'
15
25
65
75
115
125

2) প্রসারিত করা সহজ লাইন নম্বর তালিকার বিরুদ্ধে পরীক্ষা করুন

$ seq 135 | perl -ne 'print if grep {$_==$.%50} (15,25)'
15
25
65
75
115
125

$ seq 135 | perl -ne 'print if grep {$_==$.%50} (15,25,32)'
15
25
32
65
75
82
115
125
132

4

একটি তালিকা ব্যবহারের সন্দীপের ধারণার উপর ভিত্তি করে জাঁকজমক ব্যবহার করে অন্য একটি পদ্ধতি :

awk 'BEGIN { a[15] a[25] }; NR % 50 in a'

aআপনি যে লাইনে মুদ্রণ করতে চান তার উপর ভিত্তি করে অ্যারেতে কীগুলি সেট করুন । রেখাগুলি মুদ্রণ করুন যেখানে NR % 50অ্যারের কোনও কীগুলির সাথে মেলে।


পারফরম্যান্সটির কিছু ইঙ্গিত দেওয়ার জন্য, আমি এই পদ্ধতির সময় নির্ধারণ করেছিলাম এবং অন্যান্য উত্তরের সাথে তুলনা করে গড়ে of userরানের জন্য সময় নিয়েছি ।

0.276s

$ time awk 'BEGIN { a[15] a[25] }; NR % 50 in a' <(seq 1000000) > /dev/null

0.374s

$ time awk 'NR % 50 == 15 || NR % 50 == 25' <(seq 1000000) > /dev/null

0.384s

$ time perl -ne 'print if $.%50==15 || $.%50==25' <(seq 1000000) > /dev/null

0.542s

$ time perl -ne 'print if grep {$_==$.%50} (15,25)' <(seq 1000000) > /dev/null
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.