সমস্ত শব্দ এবং প্রিন্ট আউটপুট বাছাই করে পাঠ্য-ফাইল শব্দ সংঘটন গণনা পান


28

আমার একটি কমান্ড ছিল যা একটি পাঠ্য ফাইলের মাধ্যমে কাজ করবে, শব্দের সমস্ত উপস্থিতি গণনা করবে এবং এটিকে প্রিন্ট করবে:

user@box $˜ magic-command-i-forgot | with grep | and awk | sort ./textfile.txt
66: the
54: and
32: I
16: unix
12: bash
5:  internet
3:  sh
1: GNU/Linux

সুতরাং এটি লাইন বাই লাইন অনুসন্ধান করে না, তবে শব্দ দিয়ে শব্দ করে এবং এটি এটি কেবল 1 শব্দের জন্য নয়, সমস্ত শব্দের জন্য করে। আমি অনেক আগে এটি ইন্টারনেটগুলিতে কোথাও খুঁজে পেয়েছি, তবে আমি এটি খুঁজে পেতে বা মনে করতে পারি না ..

উত্তর:


33

আমি অ্যাজকেরtr পরিবর্তে ব্যবহার করব :

echo "Lorem ipsum dolor sit sit amet et cetera." | tr '[:space:]' '[\n*]' | grep -v "^\s*$" | sort | uniq -c | sort -bnr
  • tr কেবল নতুন লাইনের সাথে স্পেসগুলি প্রতিস্থাপন করে
  • grep -v "^\s*$" খালি লাইন ছাঁটাই
  • sort ইনপুট হিসাবে প্রস্তুত uniq
  • uniq -c ঘটনা গণনা করা
  • sort -bnr হোয়াইটস্পেস উপেক্ষা করার সময় সংখ্যার বিপরীত ক্রমে বাছাই করুন

কি দারুন. শপথ-প্রতি-লাইন গণনা করার জন্য এটি দুর্দান্ত কমান্ড হিসাবে পরিণত হয়েছে

খুঁজে। -নাম "* .py"-এক্সেক বিড়াল {} \; | ট্র '[: স্পেস:]' '[\ n *]' | গ্রেপ-ভি "^ \ এস * $" | সাজানো | uniq -c | সাজানো -bnr | গ্রেপ ফাক


tr -sএকাধিক স্পেস হ্যান্ডেল করতে ব্যবহার করতে পারে, বিশেষত ইনডেন্টেশনের মুখোমুখি হওয়ার সময়।
আর্জেজ

@ আর্জেজ: ভালো কথা। যদিও এটি ফলাফল পরিবর্তন করবে না এটি স্ক্রিপ্টটি কিছুটা দৃ fas় করতে পারে।
সেলার

-g( --general-numeric-sort) বিকল্প sortকিছু ক্ষেত্রে পছন্দনীয় হতে পারে। যেমন sort -nরাখা হবে 10\n1 4হিসাবে চিকিত্সারত 1 4যেমন 14, যখন sort -gযেমন সঠিকভাবে এটা বিবেচনা করবে 1 4\n10
স্কিপি লে গ্র্যান্ড গৌরও

চমৎকার কমান্ড, সত্যই একটি ভোট প্রাপ্য :)
নূর

@ বিক্রয়কারী আমি মনে করি আপনি নীচের মতো গ্রেপ এবং টিআর অংশটিকে আরও সহজ করে তুলতে পারেন: echo "Lorem ipsum dolor sit sit amet et cetera." | tr ' ' '\n' | grep -v "^$" | sort | uniq -c | sort -bnrনোট করুন যে আমি একজন শিক্ষানবিস, সুতরাং আমি ভুল হতে পারি, দয়া করে বিনা দ্বিধায় পরামর্শ দিন
এসএমসি

8
  1. প্রতি লাইনে একটি করে শব্দগুলিতে ইনপুট বিভক্ত করুন।
  2. শব্দের (লাইন) ফলাফলের তালিকাটি সাজান।
  3. স্কোয়াশের একাধিক ঘটনা।
  4. ঘটনা গণনা অনুসারে বাছাই করুন।

শব্দগুলিতে ইনপুট বিভক্ত করতে, একটি নতুন লাইন দ্বারা শব্দের বিভাজক হিসাবে আপনি মনে করেন এমন কোনও অক্ষর প্রতিস্থাপন করুন।

<input_file \
tr -sc '[:alpha:]' '[\n*]' | # Add digits, -, ', ... if you consider
                             # them word constituents
sort |
uniq -c |
sort -nr

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

5

গ্রেপ এবং অজানা ব্যবহার না করে তবে এটি আপনি যা করতে চান তা মনে হচ্ছে:

for w in `cat maxwell.txt`; do echo $w; done|sort|uniq -c
  2 a
  1 A
  1 an
  1 command
  1 considered
  1 domain-specific
  1 for
  1 interpreter,
  2 is
  1 language.
  1 line
  1 of

1
ইনপুটটিতে শেল ওয়াইল্ডকার্ডগুলি থাকলে (আপনাকে যুক্ত করতে হবে set -f) এবং বিরামচিহ্নগুলিকে শব্দের অংশ হিসাবে বিবেচনা করে (এটি বিরামচিহ্নগুলি বিশিষ্ট অক্ষর যুক্ত করে সংশোধন করা যেতে পারে IFS- নন-এএসসিআইআই অক্ষর সেটগুলিকে সমর্থন করার চেষ্টা করার জন্য সৌভাগ্য) যদি এটি কাজ করবে না। এটি খুব বড় ইনপুট ফাইলগুলির সাথে ভাল হবে না, কারণ এটি পুরো ফাইলটিকে স্মৃতিতে সঞ্চয় করে ( sortস্মার্ট হয়)।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

2

আমি বিশ্বাস করি তুমি এরকম কিছু পরেছ?

$ perl -n -e 'foreach ${k} (split(/\s+/)){++$h{$k}};END{foreach $l (keys(%h)){print "$h{$l}: ${l}\n"}}' /path/to/your/file | sort -n -k 1

অবশ্যই আপনি awkপাশাপাশি এটি করতে পারেন :)



0
file=/home/stefan/ooxml1.txt
for word in $(sed 's/[^A-Za-z]/ /g' $file | tr " " "\n" | sort -u)
do
  echo -n "$word "
  grep -c $word $file
done | sort -k2 -n 

শব্দগুলিতে ফাইল বিভক্ত করার পরে আরোহী বাছাই করে।

সহজ, grep পাবেন fishমধ্যে fisheye, তাই আপনি আংশিক মিল প্রতিরোধ grep কমান্ড প্রয়োগ উন্নত করতে হবে।

ক্লাসিকাল এইচডিডি (আইডিই) যুগে যুগে একটি মেশিনে 25 কে পাঠ্য ফাইলের জন্য প্রায় 3s লাগে।

বড় ফাইল বা প্রায়শই সঞ্চালিত ক্রিয়াকলাপগুলির জন্য একটি হ্যাশ মানচিত্রের পদ্ধতির জন্য আরও ভাল হতে পারে তবে খুব কমই চালিত কাজের জন্য বা কেবল ছোট ফাইলের পক্ষে এটি পর্যাপ্ত হতে পারে।

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