প্লেইন টেক্সট ফাইলে একটি চরের ঘটনা গণনা করুন


132

লিনাক্স / টার্মিনালের অধীনে কি কোনও উপায় গণনা করা যায়, একটি সরল পাঠ্য ফাইলে চর f কতবার ঘটে?


9
প্রযুক্তিগতভাবে এটিকে শ / বাশ / ইত্যাদি বিবেচনা করা যেতে পারে। প্রোগ্রামিং প্রশ্ন, তাই আমি মনে করি এটি উভয় জায়গায় এর বৈধতা আছে।
রব হুশকা

@ রব হুড়স্কা: হ্যাঁ, আমিও মনে করি বাশ প্রোগ্রামিং ... @ ব্রাশকা: আপনার প্রথম এবং দ্বিতীয় প্রশ্নের উত্তর হ'ল "না"!
কাপাকোব

উত্তর:


178

এটি সম্পর্কে:

fgrep -o f <file> | wc -l

দ্রষ্টব্য: স্মরণ করা / নকল করা এবং কাস্টমাইজ করা আরও সহজ ছাড়াও, এটি Vereb এর উত্তরের চেয়ে প্রায় তিন বার (দুঃখিত, সম্পাদনা করুন! প্রথম পরীক্ষায় বচত) is


আপনার গণনা \rবা \nঅক্ষরগুলির প্রয়োজন হলে এইটি কাজ করে না ; tr -cd fউত্তর যে জন্য কাজ করে।
bjnord

3
বিভিন্ন অক্ষর, যেমন গণনা a, bএবং c, ব্যবহার egrep: egrep -o 'a|b|c' <file> | wc -l
স্কিপি লে গ্র্যান্ড গৌড়ো

এছাড়াও, উত্তরের wc -cমতো ব্যবহার না করার বিষয়ে সাবধান থাকুন tr: যেহেতু grepলাইন দ্বারা লাইন আউটপুটগুলি লাইন হয়, wcলাইনগুলি শেষের অক্ষর হিসাবে গণনা করে (সুতরাং অক্ষরের সংখ্যা দ্বিগুণ করে)।
স্কিপি লে গ্র্যান্ড গৌরো

@bjnord ঠিক আছে \r, তবে গণনা করা \nকেন শুধু ব্যবহার wc -lকরবেন না ?
স্কিপি লে গ্র্যান্ড গৌরো

67

আরও দ্রুত:

tr -cd f < file | wc -c

4.9 এমবি এবং 1100000 অনুসন্ধান করা চরিত্রের উপস্থিতি সহ একটি ফাইল সহ এই কমান্ডের সময় :

real   0m0.089s
user   0m0.057s
sys    0m0.027s

Vereb উত্তরের জন্য সময় দিয়ে echo, cat, trএবং bcএকই ফাইল জন্য:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

রব হুশকার উত্তর tr, sedএবং wcএকই ফাইলের জন্য সময়:

real   0m0.465s
user   0m0.411s
sys    0m0.080s

একই ফাইল সহ fgrepএবং জেফ্রমি উত্তর দেওয়ার সময় wc:

real   0m0.522s
user   0m0.477s
sys    0m0.023s 

3
বিভিন্ন অক্ষর, যেমন গণনা a, bএবং c: tr -cd abc < file | wc -l
স্কিপি লে গ্র্যান্ড গৌরো

তুমি কি নিশ্চিত? tr -cd abc < file | wc -cপরিবর্তে বলে মনে করা হয়নি
মিথুন বি

10
echo $(cat <file>  | wc -c) - $(cat <file>  | tr -d 'A' | wc -c) | bc

যেখানে A হ'ল চরিত্র

4.9 এমবি এবং 1100000 অনুসন্ধান করা চরিত্রের উপস্থিতি সহ একটি ফাইল সহ এই কমান্ডের সময়:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

1
আপনি যদি অপ্রয়োজনীয় catগুলি ব্যবহার করেন, ফাইলনামটিকে যুক্তি হিসাবে দেন wcএবং এটি প্রায় তৃতীয়াংশ দ্রুত হয় tr
ক্যাসকেবেল

1
আপনি যদি সত্যিকার অর্থেই এটি সর্বোত্তম করতে চান তবে কেবল ফাইলটি একবারে পড়ে: প্রতিধ্বনি $ (স্ট্যাটাস-সি% s <ফাইল>) - $ (বিড়াল <ফাইলে> | টিআর-ডি 'এ' | ডাব্লুসি-সি) | বিসি
Vereb

@ ভেরেব - টিআর কেবল পঠনযোগ্য stdinতবে এটি সম্পাদনার পরিবর্তে পাইপ দেওয়া যেতে পারে cat:tr -d 'A' < <file> | wc ...
ডিএসজি

7

আপনার চরিত্রটি ধারণ করে রেখাগুলির সংখ্যা গণনা করা হলে এটি কাজ করবে:

grep -c 'f' myfile

তবে এটি একক ম্যাচের মতো একই লাইনে 'চ' এর একাধিক ঘটনা গণনা করে।


4

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

আপনার অক্ষর এবং "ইনপুট" এর দুটি ঘটনাকে আপনার অক্ষরের সাথে প্রতিস্থাপন করা হচ্ছে।

  • tr -d '\n' < file: নিউলাইনগুলি সরিয়ে দেয়
  • sed 's/A/A\n/g: "এ" এর প্রতিটি ঘটনার পরে একটি নতুন লাইন যুক্ত করে
  • wc -l: রেখার সংখ্যা গণনা করে

উদাহরণ:

$ cat file
abcdefgabcdefgababababbbba


1234gabca

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.