'Egrep -o "সাফল্য | ত্রুটি | ব্যর্থ" <ফাইল নাম> | এর বিকল্প সাজানো | ইউনিক-সি '


8

আমার মাঝে মাঝে কিছু লগ পরীক্ষা করা দরকার এবং আমি এই আদেশটি দিয়ে এটি করতে পারি:

egrep -o "success|error|fail" <filename> | sort | uniq -c

নমুনা ইনপুট:

test error on line 10
test connect success
test insert success
test started at 00:00
test delete  fail

নমুনা আউটপুট:

1 error
1 fail
2 success

আমি জানতে চাই যে কেউ যদি একটি সংক্ষিপ্ত আদেশ দিয়ে এটি করার কোনও উপায় জানে?

আপনি জিজ্ঞাসার আগে আমি কেন একটি আলাদা আদেশ দিয়ে এটি করতে চাই ... কোনও বিশেষ কারণ নেই, আমি কেবল কৌতূহলী :)

উত্তর:


4

এটি করার awkউপায় এখানে

awk 'BEGIN{RS=" "}/success/{s++}/fail/{f++}/error/{e++}END{print "Success:"s" Failed:"f" Error:"e}' abc

তবে এই সমস্ত এক লাইনারটি আমাদের ভাল পুরানো থেকে কিছুটা দীর্ঘতর হবে grep


4

না, আমি মনে করি আপনি যেমন পান ঠিক তেমন ভাল আছেন। স্বাভাবিকভাবেই, আপনি এটি একটি পার্ল স্ক্রিপ্ট দিয়ে করতে পারেন,

perl -nle  's/.*(error|fail|success).*/$1/ && $a{$_}++ ; END {  print "$_ $a{$_}" for keys %a } ' test.txt

... তবে এটি আরও জটিল এবং স্বজ্ঞাত।


আমি একটি নমুনা ইনপুট আমার প্রশ্ন ... হোপ এখন আরো স্পষ্ট যে কি কমান্ড অসুবিধার জন্য কি করতে ... sory যোগ
Wolfy

1
ঠিক আছে, আমি সেই অনুযায়ী পার্ল অনিলাইনারটি সংশোধন করেছি। আমি এখনও মনে করি যে egrep সহ আপনার সমাধানটি আরও ভাল এবং স্বজ্ঞাত।
জানুয়ারী

2

খুব কম নয়, তবে যেহেতু আপনার অবশ্যই নিয়মিত প্রকাশের প্রয়োজন নেই, তাই এখানে রয়েছে fgrep( grep -F)।

fgrep 'success
error
fail' "$filename" | sort | uniq -c

বাশে একই জিনিস লেখার আর একটি উপায়:

fgrep $'success\nerror\nfail' "$filename" | sort | uniq -c

1

আপনি একটি সাধারণ বাশ স্ক্রিপ্ট লিখতে পারেন এবং তারপরে স্ক্রিপ্টটি কল করতে পারেন:

#!/bin/bash
egrep -o "success|error|fail" "$1" | sort | uniq -c

এবং এটিকে সংরক্ষণ করুন (উদাহরণস্বরূপ) myscript.sh। তারপরে একটি করুন chmod +x myscript.shএবং আপনি এটি পছন্দ করতে পারেন myscript.sh <filename>


তবে এই ক্ষেত্রে কমান্ডটি একই ... আপনি কেবল একটি স্ক্রিপ্ট তৈরি করেছেন যা কমান্ডটি কল করে ...
ওল্ফি

আমি ভেবেছিলাম আপনি কেবল আপনার লগগুলির গ্রেপিং দ্রুত করতে চেয়েছিলেন। শুধু কৌতূহলী, আপনি ইতিমধ্যে সরবরাহ করা যদি আপনার জন্য ভাল কাজ করে তবে আপনি কেন বিকল্প কমান্ড চান?
jeremija

যেমন আমি বলেছিলাম: আমি ঠিক কৌতূহলী অন্যরা কীভাবে এটি করে ... অনেক সময় আমি বুঝতে পেরেছিলাম যে লোকেরা কিছু করার জন্য কিছু অভিনব / দুর্দান্ত উপায় জানে এবং আমি এখন জিনিসগুলি করার উপায়গুলি শিখতে পছন্দ করি ...
ওল্ফি

2
সেক্ষেত্রে আপনি সেই ব্যক্তি :-) আপনার কমান্ড লাইনটি ইউনিক্স কমান্ড লাইনের শক্তিটি দুর্দান্ত, সংক্ষিপ্ত, পরিষ্কার এবং শোষণ করে। আর কি চাওয়ার?
জানুয়ারী

0

আপনার কমান্ডটি সংক্ষিপ্ত এবং মিষ্টি থাকা সত্ত্বেও কোনও পদটির সংখ্যার গণনা করার জন্য বরং এক বর্তনী উপায়। আমি সম্ভবত শেল লুপের অভ্যর্থনা, সরাসরি পন্থা এবং গ্রেপের সি-ফ্ল্যাগ (যা ঠিক এটি করে) ব্যবহার করব:

for i in success test fail; do echo `grep -c $i <filename>` $i; done

সংক্ষিপ্ত নয়, উত্তেজনাপূর্ণ নয়, বৃহত লগ ফাইলেগুলির (সম্ভবত sort) সম্ভাব্য দ্রুত ) আমি বলব এটি একটি ধোয়া।


-1

এটি একটি জঘন্য উত্তর হতে পারে তবে আমি মনে করি, sortএক্ষেত্রে যথেষ্ট অকেজো; সম্ভবত আপনি এটি বাদ দিতে পারেন। তবুও এখানে আমরা তিনটি পৃথক কমান্ডের জন্য তিনটি পৃথক কমান্ড ব্যবহার করছি।

আমরা তাদের সংক্ষিপ্ত করতে পারি যদি তাদের কিছু বিকল্পের সাথে পৌঁছে যায় grepতবে আমি দেখতে পাচ্ছি না ... :)


2
না, তা নয়, অন্যথায় ইউনিক অনুসন্ধানের পদগুলির কেবল একটানা উদাহরণ গণনা করবে । যেমন আপনার যদি সাফল্য, সাফল্য, ব্যর্থতা, সাফল্য থাকে তবে ইউনিকের আউটপুট হবে 2 success 1 fail 1 success
জানুয়ারী

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