একটি নির্দিষ্ট সময়ের মধ্যে একটি লগ ফাইল গ্রেপ কিভাবে


22

আমার একটি লগ ফাইল আছে, লগের প্রতিটি লাইন একটি তারিখের সাথে পূর্ববর্তী হয়, যেমন:

2012-03-06 11:34:48,657 blah blah blah...

আমি কীভাবে grepএই ফাইলটি করব এবং কেবল সকাল 8 টা থেকে 11 টা পর্যন্ত কেবল লাইনগুলি পাব?

আমার উদ্দেশ্য হল আমি সকাল 8 টা থেকে 11 টা পর্যন্ত ঘটতে থাকা ত্রুটির সংখ্যা গণনা করতে চাই।

উত্তর:


24
egrep '^[^ ]+ (0[89]|1[0-9]|2[012]):'

বিস্তারিত ব্যাখ্যা বিভিন্ন রেজেেক্স (নিয়মিত প্রকাশ) টিউটোরিয়ালে পাওয়া যায় ; egrep"POSIX প্রসারিত" বাক্য গঠন ( man 7 regex) ব্যবহার করে।

  • প্রথমটির ^অর্থ "লাইনের শুরু"।

  • [^ ]+ আসল তারিখ নির্বিশেষে কেবল তারিখের ক্ষেত্রের সাথে মেলে।

    • [...]মানে "বন্ধনীগুলির মধ্যে যে কোনও অক্ষর", তাই [89]মিলবে 8বা হয় 9; [0-9]যে কোনও সংখ্যা এবং [^ ]এটি কোনও স্থান ব্যতীত ( ^অভ্যন্তরীণ বন্ধনীগুলির কারণে)।

    • +মানে হলো "এক বা একাধিক পূর্ববর্তী এর" (উদাহরণস্বরূপ, a+মেলে দিবে a, aaaআর aaaaaaaa)।

    • সুতরাং ^[^ ]+লাইনটির শুরু দিয়ে শুরু হবে এবং যতগুলি ফাঁকা অক্ষরের সাথে এটি মিলবে match

  • (...|...|...)মানে হলো "হয় দেওয়া প্যাটার্নের", তাই (0[89]|1[0-9]|2[012])মানে "হয় 0[89]বা 1[0-9]বা 2[012]"। এটি 08 থেকে 22 পর্যন্ত সমস্ত সংখ্যার সাথে মিলবে।


কিছুটা ভাল বিকল্প হ'ল:

awk -F'[: ]' '$2 >= 8 && $2 <= 22 { print }'

-Fবিকল্প অনুযায়ী পৃথক ক্ষেত্রগুলির মধ্যে যে লাইন splits [: ]Regex (ম্যাচিং পারেন :বা একটি স্থান), এবং awk স্ক্রিপ্ট চেক 2nd কলাম (ঘন্টা)।


হাই, এটি কাজ করে .. তবে কীভাবে এটি কাজ করে আপনি একটি সামান্য ব্যাখ্যা যোগ করতে পারেন? আমি ^[^ ]+অংশটি পাই না ..
রোজদি

20

গ্রেপ ব্যবহার করে বিরক্ত করবেন কেন? আপনি কেবল সেড ব্যবহার করতে পারেন।

উদাহরণ:

sed -n '/Jun 17 13:39:54/ , /Jun 18 10:50:28/p' kern.log

এটি June 17 13:39:54এবং এর মধ্যে সমস্ত লগ প্রিন্ট করবেJune 18 10:50:28


1
আমি মনে করি যে ওপি সকাল 8 টা থেকে 11 টা পর্যন্ত সমস্ত লগ চায়, একটি নির্দিষ্ট দিন থেকে কেবল বট করে।
ডেনিস

1
তিনি তাও করতে পারেন। যেমন: সেড-এন '/ 2012-3-06 11:34:48 /, / 2012-3-06 16: 34: 48 / পি' লগফিল.নাম
নিমা জি

1
বাজে টাইপ। আমি বলতে চাইছিলাম: নির্দিষ্ট দিন থেকে নয়
ডেনিস

2
এই পদ্ধতির সমস্যাটি হ'ল সেই টাইমস্ট্যাম্পের সাথে লগ ফাইলে একটি লাইন থাকতে হবে। উপরের উদাহরণে, টাইমস্ট্যাম্পের সাথে যদি কোনও লাইন না থাকে 2012-03-06 11:34:48, তবে কিছুই মুদ্রণ করবে না। উপরোক্ত অজানা পদ্ধতির ক্ষেত্রে এ জাতীয় কেসগুলির জন্য কাজ করা হবে (যেমন আপনি 8 থেকে 11 এর মধ্যে সমস্ত লগ চান, তবে আপনি জানেন না যে সময়ে লগ এন্ট্রি রয়েছে কিনা তা 2012-03-06 08:00:00 বা এর জন্য কিছু) at at all)।
ব্যবহারকারী 650654

0

এটি করার একটি খুব সহজ উপায় আছে।

ডাউনলোড / ডকুমেন্টেশন: autodrgrep.kl.sh

COMMAND:

./autodrgrep.kl.sh   notchef   /tmp/client.log   '2016-05-08_08:00:00,2016-05-08_23:00:00'   'INFO'   'a2ensite'   5  10  -show

ব্যাখ্যা:

  • autodrgrep.kl.sh হ'ল নাম।

  • notchef হ'ল একটি বিকল্প যা সরঞ্জামটি তা করার জন্য দেওয়া হয় what এই বিশেষ ক্ষেত্রে, এটি সরঞ্জামটি বলছে যে কোন ধরণের লগ ফাইল /tmp/client.log।

  • /tmp/client.log অবশ্যই লগ ফাইল।

  • 2016-05-08_19: 12: 00,2016-05-08_21: 13: 00 আপনি যে স্ক্যান করতে চান তা লগের মধ্যে থেকে তারিখের সীমা range

  • "আগ্রহী" লগগুলির লাইনে থাকা একটি স্ট্রিং "INFO"।

  • "a2ensite" একই লাইনের আরেকটি স্ট্রিং যা আপনি "INFO" স্ট্রিংটি চালু করার প্রত্যাশা করছেন। এই দুটি স্ট্রিং (INFO এবং a2ensite) উল্লেখ করে আপনি যে লাইনগুলি দ্রুত চান তা বিচ্ছিন্ন করে এবং প্রক্রিয়াজাত করে, বিশেষত যদি আপনি একটি বিশাল লগ ফাইলটি নিয়ে কাজ করছেন।

  • 5 সতর্কতা নির্দিষ্ট করে। ৫ টি নির্দিষ্ট করে আপনি প্রোগ্রামটি সতর্কতা হিসাবে সতর্ক করতে বলছেন যদি আপনার উল্লেখ করা সন্ধানের স্ট্রিংয়ের কমপক্ষে ৫ টি ঘটনা উপস্থিত থাকে

  • 10 সমালোচনামূলক নির্দিষ্ট করে। 10 নির্দিষ্ট করে, আপনি প্রোগ্রামটিকে ক্রিটিকাল হিসাবে সতর্ক করতে বলছেন যদি আপনার নির্দিষ্ট করা অনুসন্ধান স্ট্রিংয়ের কমপক্ষে 10 টি ঘটনা উপস্থিত থাকে।

  • - কী ধরণের প্রতিক্রিয়া পাবেন তা প্রদর্শন করুন। নির্দিষ্ট করে দেখানোর মাধ্যমে আপনি বলছেন যে নির্দিষ্ট প্যাটার্নগুলির সাথে স্ক্রিনে আউটপুট মিলছে এমন কিছু পাওয়া যায় কিনা।

নমুনা রান:

# ./autodrgrep.kl.sh notchef  /tmp/client.log   '2016-05-08_19:12:00,2016-05-08_21:13:00' 'INFO' 'a2ensite'  5  10  -show

[2016-05-08 19:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:13:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 19:42:57-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:42:57-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:42:57-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:43:08-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:43:11-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:13:10-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:42:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:42:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:42:59-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:43:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:43:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 21:12:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 21:12:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 21:12:59-07:00] INFO: execute[a2ensite default] ran successfully
23
2---78720---23---ATWFILF---(2016-05-08)-(19:12)---(2016-05-08)-(21:13) SEAGM

যদি ব্যবহারকারী নির্দিষ্ট তারিখের সীমা বা সময় ফ্রেম লগতে না থাকে তবে কী হবে?

উপরের কমান্ডের প্রতিটি রানের সর্বদা একটি লাইন থাকবে (আউটপুটটির শেষ লাইন) যা "ATWFILF" বা "ETWNFILF" বলে।

  • এটিডাব্লুআইএলএফটির অর্থ হল যে আপনি অনুসন্ধানের অনুরোধ করেছিলেন আসল তারিখের সীমা বা সময় ফ্রেমটি লগে পাওয়া গেছে। সুতরাং এটি খুব ভাল।

  • ETWNFILF অর্থ আপনার সন্ধানের জন্য অনুরোধ করা আসল তারিখের সময় বা সময় ফ্রেম লগটিতে পাওয়া যায় নি। এই ক্ষেত্রে, আপনার নির্দিষ্ট সময়ের সবচেয়ে কাছের সময়টি সনাক্ত করা হবে এবং পরিবর্তে ব্যবহৃত হবে।

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