কিছু সংখ্যক লাইনের জন্য কীভাবে দৌড়াতে হবে??


18

আমি এর সাথে কিছু লাইন বের করতে চাই awk। নিম্নলিখিত কাজটি করা কি সম্ভব:

ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'

আমি কীভাবে 122 থেকে 129 লাইন নম্বরগুলি বিশদটি প্রদর্শন করতে পারি?


আপনি যদি কোনও লুপটিতে এটি করেন তবে আমি sedপদ্ধতিটি পরামর্শ দেব , যেহেতু sedতার চেয়ে অনেক ছোট (এবং দ্রুত লোড হয়) awk
zrajm

উত্তর:


36

কীভাবে awkকাজ করে তা আপনি বুঝতে পারেন নি । উল্লিখিত "প্রোগ্রাম" ইনপুটটির প্রতিটি লাইন (বা "রেকর্ড") এর জন্য সর্বদা একবার কার্যকর করা হয় , এর জন্য FORকোনও অনুরূপ নির্মাণের প্রয়োজন নেই । শুধু ব্যবহার করুন:

ভার্বোজ পদ্ধতি

ls -l | awk 'NR>=122 && NR<=129 { print }'

আরও কমপ্যাক্ট পদ্ধতি

ls -l | awk 'NR==122,NR==129'

এটির জন্য একটি পরিসর দেয় NRযা "নম্বর রেকর্ড", সাধারণত এটি বর্তমান লাইনে awkপ্রক্রিয়াজাত হয়।


6
আসলে টিপিক্যাল awkযেমন টাস্ক কোড সাধারণত ls -l | awk 'NR==122,NR==129'
manatwork

awk ব্যবহার করে ফাইলটি থেকে শেষ 100 লাইন পাওয়ার জন্য আদেশ কি
শিহাবুধীন কেএম

8

আর একটি বিকল্প পদ্ধতি হ'ল sed:

ls -l | sed -ne '122,129p'

তবে, যদি আপনার প্রশ্ন হিসাবে বোঝা যায়, এর জন্য ওড়না ব্যবহার করা গুরুত্বপূর্ণ, জরাজমের উত্তর সম্পর্কে ম্যানটওয়ার্কের মন্তব্যে যান। যেমন উইকের ডকুমেন্টেশন বলে:

   A  pattern  may  consist  of two patterns separated by a comma; in this
   case, the action is performed for all lines from an occurrence  of  the
   first pattern though an occurrence of the second.

আপনি যদি চান তবে আপনি আরও উন্নত শর্ত তৈরি করতে পারেন। উদাহরণ স্বরূপ:

ls -l | awk 'NR==122,/foobar/'

এটি 122 লাইনে আউটপুট শুরু করবে এবং একটি লাইনে "ফুবার" শব্দটি উপস্থিত না হওয়া অবধি চলতে থাকবে।

আপনি যদি আমাদের আসল ব্যবহারের ঘটনাটি জানান তবে আমরা উত্তরগুলির সাথে আরও ভাল সমাধান সরবরাহ করতে সহায়তা করতে পারি। আমি উদ্বিগ্ন যে এটি একটি XY সমস্যার মতো মনে হচ্ছে ।


2

awkকোর্টিল ব্যবহার করে এটি করার আরেকটি উপায় (যদিও আমি পদ্ধতিটিকে প্রাধান্য দিই ):

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