এই প্যাটার্নটির মিলটি সেড ব্যবহার করে কেন কাজ করছে না তা যে কেউ ব্যাখ্যা করতে পারেন


2

সুপার ব্যবহারকারী থেকে এই থ্রেডের সুপারিশের ভিত্তিতে লগগুলির নির্দিষ্ট সময়গুলি মুদ্রণের চেষ্টা করছেন । আমার নিদর্শনগুলি সেডের সাথে কেন মেলে না তা আমি নিশ্চিত নই। আমি এখানে আটকানো নমুনার তারিখ এবং সময় আছে । যদি আমি ব্যবহার করি

sed -n '/2014-03-27 07:00:00/ , /2014-03-27 11:25:00/p' log-file-name

আমি আশা করছি এটি সকাল 7 টা থেকে 11 টা এর মধ্যে মেলে এমন সমস্ত লাইন মুদ্রণ করবে। তবে আমি শূন্য ম্যাচ পাই। যদি আমি "-n" অপসারণ করি তবে ফলস্বরূপ এটি সকাল 3 টা থেকে 16:14 পর্যন্ত সম্পূর্ণ লাইনগুলি মুদ্রণ করে। আমি উপরের সিড কমান্ডটি একটি একক এবং ডাবল উদ্ধৃতি দিয়ে টুইট করার চেষ্টা করেছি এবং বিভিন্ন ব্যবধান বিকল্প চেষ্টা করেছি। তবে ফলাফল সর্বদা "সমস্ত বা কিছুই নয়"। কেউ দয়া করে ব্যাখ্যা করতে পারেন কেন আমি কেন ঘন্টা উইন্ডোটির জন্য লাইনগুলি মুদ্রণ করতে বলছি না?


1
আপনি যে ফাইলটি দেখার চেষ্টা করছেন তার কিছুটা অন্তর্ভুক্ত করাতে যদি সুন্দর হতে পারে। একটি ভাবনা কি আপনি নিশ্চিত যে তারিখ এবং সময়ের মধ্যে কেবল একটি একক স্থান আছে? এছাড়াও আপনি কি নিশ্চিত যে এটি একটি স্পেস এবং একটি ট্যাব নয়?
এমডিপিসি

উত্তর:


1

আপনি শুরুর সাথে স্টড প্যাটার্ন বৈশিষ্ট্যটি ব্যবহার করার চেষ্টা করছেন।

সুতরাং আপনার প্রথম (প্রারম্ভিক) প্যাটার্নের সাথে মিলে যদি একটি লাইন পাওয়া যায়, তবে দ্বিতীয় (স্টপ) প্যাটার্নের সাথে মিলিত কোনও লাইন পাওয়া না পাওয়া পর্যন্ত আউটপুট ফেরত আসবে।

যদি আপনার ফাইলটিতে প্রারম্ভের লাইনটি ঠিক উপস্থিত না থাকে তবে আপনি কোনও ফল পাবেন না।

আপনার বিকল্পগুলি থেকে -n পতাকা মুছে ফেলার অর্থ হ'ল এটি আপনার প্যাটার্নের সাথে মেলে না, এমনকি সমস্ত মুদ্রণ করা হবে। -N '/.../p' এর সাথে সেড ব্যবহার করা এটিকে গ্রেপের মতো আচরণ করবে।

আমি একটি দরকারী টিউটোরিয়াল পাওয়া এখানে

আপনার ক্ষেত্রে, আপনি একটি প্যাটার্ন কিছু বিবেচনা করতে পারেন:

\d{4}-\d{2}-\d{2} ((0[7-9])|(1[0-1])):\d{2}:\d{2},\d{3}

উপরেরগুলি 07:00 থেকে 11:59 পর্যন্ত সমস্ত
ব্যাখ্যা মিলবে কিছু ব্যাখ্যা:
\d{4} = match 4 digits (year, eg. 2014)
(0[7-9]) = match 07 - 09
| = OR
(1[0-1]) = match 10 -11


ঐটা এটা ছিল. এটি প্রকৃতপক্ষে শুরু এবং স্টপ প্যাটার্নটি লগ ফাইলটিতে যাচ্ছিল না আমি সন্ধান করছি। আমি ডেস্কের বিরুদ্ধে মাথা ঘুরছিলাম, কারণ এটি অতীতে আমার জন্য কাজ করত এবং হঠাৎ এটি কাজ করা বন্ধ করে দেয়। দুর্দান্ত টিউটোরিয়ালটির লিঙ্কটির জন্য সমস্ত ধন্যবাদ। এটি আমি দেখেছি সেরা টিউটোরিয়ালগুলির মধ্যে একটি। দুর্ভাগ্যবশত আমি কারণ আমি এই সাইট :( 15 খ্যাতি হবে না যদি আপনি কোন upvotes দিতে পারবে না।
user2476714

0

ইউনিক্স ছোট ছোট কাজগুলি করে দুর্দান্ত, এটি লিঙ্কযুক্ত পোস্ট থেকে বিশ্রী লাগে এবং একটি তারিখ পাইপ যোগ করে।

এটি 2014-03-27 এর সাথে লাইনের শুরুতে সমস্ত তারিখগুলি সন্ধান করে, আউটপুট নেয় এবং ঘন্টা (দ্বিতীয় ক্ষেত্র) গ্রেটার বা 7 এর সমান এবং 11 এর চেয়ে কম সময় সহ সর্বদা খুঁজে পায়।

grep ^2014-03-27 log-file | awk -F'[: ]' '$2 >= 7 && $2 < 11 { print }'

ধন্যবাদ এটি প্রায় আমার জন্য কাজ করে। তবে আমার একটা সমস্যা বাকি আছে। আরও দানাদার পদ্ধতিতে সময় প্রয়োজন হলে আমি কীভাবে এটি ব্যবহার করব। যেমন: সকাল সাড়ে to টা থেকে সাড়ে ৮ টা পর্যন্ত। আমি যদি বুঝতে পারি যে এটি যদি একই সময়ে হয় তবে উদাহরণস্বরূপ: "গ্রেপ ^ 2014-02-20 লগ-ফাইল-নাম | awk -F '[:]' '$ 2> = 7 && $ 2 <8 && $ 3 > = 35 && $ 3 <45 {মুদ্রণ} '"কাজ করছে বলে মনে হচ্ছে। তবে আমি নিশ্চিত না যে এটি ফিল্টারের জন্য কীভাবে
ঘণ্টাখানেকের

আমি এটি যুক্তিযুক্ত ব্রেকআপ দিয়ে করব। লাইন 1, ঘন্টা শেষ হয় যে শেষ। লাইন 2, মাঝ ঘন্টা। লাইন 3, ঘন্টা যা এক মিনিটে যায়। সুতরাং 7:35 - 10-25 গ্রেপ ^ 2014-02-20 লগ-ফাইল-নাম | awk -F '[:]' '$ 2 = 7 &&$ $ 3> = 35 {মুদ্রণ}' "গ্রেপ ^ 2014-02-20 লগ-ফাইল-নাম | awk -F '[:]' '$ 2> = 8 && $ 2 <10 {মুদ্রণ gre 'গ্রেপ ^ 2014-02-20 লগ-ফাইল-নাম | awk -F' [:] '' $ 2 = 10 && $ 3 <25 {মুদ্রণ} 'হ্যাঁ, এটি ছোট নয় তবে এটি পঠনযোগ্য এবং যৌক্তিকভাবে পরিষ্কার.আপনি যদি ছোট চান তবে স্ক্রুটিনিজারের উত্তরটি দিয়ে যান
মাইকেল টমকিন্স

0

এটি রেগেক্স ব্যবহার করে জটিল হবে। সম্ভবত এর মতো কিছু কাজ করবে:

awk '$1 FS $2>=s{p=1} $1 FS $2>e{exit}p' s="2014-03-27 07:00:00" e="2014-03-27 11:25:00" file

ব্যাখ্যা:

awk '
  $1 FS $2>=s{     # `$1 FS $2` is the string the consists of field 1, a space, 
                   # and field 2. If it is larger or equal (string comparison) 
                   # to the variable s, then: 
    p=1            # set a variable p to 1
  }
  $1 FS $2>e{      # if the string $1 FS $2 is larger than variable e, then
    exit           # exit the script ( stop processing the file )
  }
  p                # if variable p is equal to 1 then print the record (line)
' s="2014-03-27 07:00:00" e="2014-03-27 11:25:00" file    
                   # line above: set variables p and s and specify file name

$1 FS $2 স্ট্রিংটি ক্ষেত্র 1, একটি স্থান এবং ক্ষেত্র 2 নিয়ে গঠিত হয় যদি এটি ভেরিয়েবলের সাথে বড় বা সমান (স্ট্রিং তুলনা) হয় তবে ভেরিয়েবল পি-তে 1 সেট করুন


এটি করার সবচেয়ে সহজ উপায় এটি হত। তবে দুর্ভাগ্যক্রমে এটি আমাকে কোনও হিট দিচ্ছে না। আমি কেবল প্রম্পট স্ট্রিং ফিরে পেতে। আমি নিজেই সমস্যাটি চিহ্নিত করার চেষ্টা করি এবং আমি এটি সংশোধন করতে পারি কিনা তা দেখার চেষ্টা করি তবে সত্যই আমি "$ 2> = s {p = 1}" এর অর্থ জানি না।
ব্যবহারকারী 2476714

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