গ্রেপ ব্যবহার করে কোনও ফাইলে শেষ ম্যাচটি পাচ্ছেন


58

গ্রেপ ব্যবহার করে কোনও ফাইলের নিয়মিত প্রকাশের চূড়ান্ত মিলের সেরা উপায় কী?

এছাড়াও, শুরুটির পরিবর্তে ফাইলটির শেষ থেকে গ্রেপিং শুরু করা এবং এটি প্রথম ম্যাচটি খুঁজে পেলে থামানো সম্ভব?

উত্তর:


85

আপনি চেষ্টা করতে পারেন

grep pattern file | tail -1

অথবা

tac file | grep pattern | head -1

অথবা

tac file | grep -m1 pattern

20
tac file | grep -m 1 pattern
ডেনিস উইলিয়ামসন

1
grep -nপ্রকৃত ফাইলটিতে আমি লাইন নম্বর ( ) পেতে চাইলে যুক্ত হওয়া সীমাবদ্ধতার সাথে আমার মনে হয় যে আমি tacকিছু বিয়োগ করতে না চাইলে বেশ কিছুটা এড়িয়ে চলতে হয়েছিল wc -l। অন্যথায় tacসাথে grep -m1অনেক বোঝা যায়।
নিক মেরিল

1
আমি এর চেয়ে আরও পারফরম্যান্স সংস্করণ দেখতে চাই, যেহেতু আমি একটি 20 জিবি ফাইল অনুসন্ধান করার চেষ্টা করছি।
জেফ

@ ডেনিস উইলিয়ামসনের উত্তর আরও ভাল কারণ grepপ্রথম ম্যাচের পরে কাজ করা বন্ধ হয়ে যাবে। ছাড়াই -m 1, grepপ্রথমে ফাইলটিতে সমস্ত মিলে যাওয়া নিদর্শনগুলি খুঁজে পাবে , তারপরে headকেবল প্রথমটি দেখাবে - খুব কম দক্ষ। ডেনিস, দয়া করে এটি একটি পৃথক উত্তরে পোস্টিং বিবেচনা করুন!
গিলাদ মায়ানী

1

ইউনিক্স / লিনাক্স / ম্যাক / সাইগউইনে বিশাল পাঠ্য ফাইলগুলির সাথে কারও জন্য কাজ করা। যদি আপনি উইন্ডোজটিতে লিনাক্স সরঞ্জামগুলি সম্পর্কে এইটি চেক আউট ব্যবহার করেন: https://stackoverflow.com/questions/3519738/ কি-is-the-best-way-to-use-linux-utilities-und-windows ।

ভাল পারফরম্যান্স পেতে কেউ এই ওয়ার্কফ্লো অনুসরণ করতে পারে:

  1. gzip দিয়ে সংকুচিত করুন
  2. উপযুক্ত কী সহ ফাইলকে সূচীতে জিনডেক্স (github: https://github.com/mattgodbolt/zindex ) ব্যবহার করুন
  3. zqপ্যাকেজ থেকে সূচী ফাইলটি জিজ্ঞাসা করুন ।

এর গিথুব রেডমে থেকে উদ্ধৃতি:

একটি সূচক তৈরি করা হচ্ছে

জিনডেক্সকে জানাতে হবে যে প্রতিটি লাইনের কোন অংশটি সূচককে গঠন করে। এটি নিয়মিত প্রকাশের মাধ্যমে, ক্ষেত্রের মাধ্যমে বা বাহ্যিক প্রোগ্রামের মাধ্যমে প্রতিটি লাইন পাইপ করে করা যেতে পারে।

ডিফল্টরূপে জিনডেক্স file.gz.zindex এর সূচক তৈরি করে যখন file.gz সূচককে বলা হয়।

উদাহরণ:

একটি সংখ্যা নিয়মিত প্রকাশের সাথে মিল রেখে লাইনে একটি সূচক তৈরি করুন। ক্যাপচার গোষ্ঠীটি সেই অংশটিকে নির্দেশ করে যা সূচী করা উচিত এবং অপশনগুলি দেখায় যে প্রতিটি লাইনের একটি অনন্য, সংখ্যাসূচক সূচক রয়েছে।

$ zindex file.gz --regex 'id:([0-9]+)' --numeric --unique

উদাহরণ: একটি সিএসভি ফাইলের দ্বিতীয় ক্ষেত্রে একটি সূচক তৈরি করুন:

$ zindex file.gz --delimiter , --field 2 

উদাহরণ:

ডকুমেন্টের রুটের ক্রিয়া অ্যারেতে আইটেমগুলির মধ্যে একটি জেএসএন ফিল্ড অর্ডার আইড.আইডিতে একটি সূচক তৈরি করুন (জেকিউ প্রয়োজন)। জেকিউ কোয়েরিটি সমস্ত অর্ডারআইডি.আইডির একটি অ্যারে তৈরি করে, তারপরে জ্যাকের সাথে পাইপযুক্ত প্রতিটি স্বতন্ত্র রেখা আউটপুটের একক লাইন তৈরি করে তা নিশ্চিত করার জন্য একটি স্পেসের সাথে যোগ দেয়, একাধিক ম্যাচ ফাঁক দিয়ে পৃথক করে (যা ডিফল্ট বিভাজক)।

$ zindex file.gz --pipe "jq --raw-output --unbuffered '[.actions[].orderId.id] | join(\" \")'" 

সূচকের অনুসন্ধান করা হচ্ছে

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

$ zq file.gz 1023 4443 554 

লাইন নম্বর দ্বারা আউটপুট করাও সম্ভব, তাই কোনও ফাইল থেকে 1 এবং 1000 রেখা মুদ্রণ করতে:

$ zq file.gz --line 1 1000

1

আমি সর্বদা বিড়াল ব্যবহার করি (তবে এটি এটি আরও দীর্ঘতর করে তোলে): cat file | grep pattern | tail -1

আমি কলেজের আমার লিনাক্স অ্যাডমিন কোর্স শিক্ষককে দোষী করব যারা বিড়ালদের ভালবাসে :))))

- কোনও ফাইল গ্রেপ করার আগে আপনাকে প্রথমে ক্যাট লাগাতে হবে না। grep pattern file | tail -1এবং আরও কার্যকর।


6
এটি আরও খারাপ ছাড়া কেকমক্সের উত্তরের প্রথম অংশ।
আগস্ট

এটি কাজ করে তবে এটি অপ্রয়োজনীয় পদক্ষেপগুলি করে। হালকা ব্যবহারের জন্য, এই সমাধানটি সূক্ষ্মভাবে কাজ করে, তবে এটি ভাল করে না। কারণটি কারণ আপনার catফাইলটি দরকার নেই এবং এটিতে পাইপ করা প্রয়োজন grep। আপনি কেকেমক্সের উত্তরে যেমন grepসরাসরি ফাইলটি অনুসন্ধান করতে পারেন grep pattern file(এবং তারপরে tailশেষ ফলাফলটি ফেরত দিতে ব্যবহার করতে পারেন)।
jvriesem
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.