লিনাক্স কমান্ড বা স্ক্রিপ্ট একটি পাঠ্য ফাইলে নকল লাইন গণনা?


116

আমার যদি নীচের কন্টেন্ট সহ একটি পাঠ্য ফাইল থাকে

red apple
green apple
green apple
orange
orange
orange

লিনাক্সের কমান্ড বা স্ক্রিপ্টটি কি আমি নিম্নলিখিত ফলাফলটি পেতে ব্যবহার করতে পারি?

1 red apple
2 green apple
3 orange

উত্তর:


214

এটি মাধ্যমে প্রেরণ করুন sort(সংলগ্ন আইটেম একসাথে রাখার জন্য) তারপরে uniq -cগণনা দেওয়ার জন্য, যেমন:

sort filename | uniq -c

এবং তালিকাটি বাছাই করা ক্রমে (ফ্রিকোয়েন্সি অনুসারে) আপনি পেতে পারেন

sort filename | uniq -c | sort -nr

48

Borribles হিসাবে 'প্রায় একই কিন্তু আপনি যোগ যদি dকরতে PARAM uniqশুধুমাত্র শো সদৃশ করুন।

sort filename | uniq -cd | sort -nr

1
সামান্য -dনোটের জন্য থাম্বস আপ ।
sepehr

6

uniq -c file

এবং যদি ফাইলটি ইতিমধ্যে বাছাই না করা হয়:

sort file | uniq -c


3

এটা চেষ্টা কর

cat myfile.txt| sort| uniq

-সি বা -ডি পতাকা ব্যতীত ইউনিক নন-সদৃশ থেকে নকল রেখাগুলি আলাদা করে না, বা আমি কিছু অনুপস্থিত করছি?
ড্রেভিকো


2

আপনি কি বর্ণানুক্রমিক, আদেশযুক্ত তালিকার সাথে বেঁচে থাকতে পারেন:

echo "red apple
> green apple
> green apple
> orange
> orange
> orange
> " | sort -u 

?

green apple
orange
red apple

অথবা

sort -u FILE

-u মানে অনন্য, এবং স্বতন্ত্রতা কেবল বাছাইয়ের মাধ্যমে পৌঁছে যায়।

একটি সমাধান যা অর্ডার সংরক্ষণ করে:

echo "red apple
green apple
green apple
orange
orange
orange
" | { old=""; while read line ; do   if [[ $line != $old ]]; then  echo $line;   old=$line; fi ; done }
red apple
green apple
orange

এবং, একটি ফাইল সহ

cat file | { 
old=""
while read line
do
  if [[ $line != $old ]]
  then
    echo $line
    old=$line
  fi
done }

শেষ দুটি কেবল নকলগুলি সরিয়ে দেয়, যা তাত্ক্ষণিকভাবে অনুসরণ করে - যা আপনার উদাহরণের সাথে খাপ খায়।

echo "red apple
green apple
lila banana
green apple
" ...

একটি কলা দ্বারা বিভক্ত দুটি আপেল মুদ্রণ করবে।


0

কেবল একটি গণনা পেতে:

$> egrep -o '\w+' fruits.txt | sort | uniq -c

      3 apple
      2 green
      1 oragen
      2 orange
      1 red

বাছাই করা গণনা পেতে:

$> egrep -o '\w+' fruits.txt | sort | uniq -c | sort -nk1
      1 oragen
      1 red
      2 green
      2 orange
      3 apple

সম্পাদনা

আহা, এটি শব্দের সীমানা বরাবর ছিল না, আমার খারাপ। পূর্ণ রেখাগুলির জন্য ব্যবহারের আদেশ এখানে রইল:

$> cat fruits.txt | sort | uniq -c | sort -nk1
      1 oragen
      1 red apple
      2 green apple
      2 orange

0

কাউন্টার টাইপটি ব্যবহার করে এখানে একটি সাধারণ অজগর স্ক্রিপ্ট । সুবিধাটি হ'ল এটির জন্য মূলত শূন্য মেমরি ব্যবহার করে ফাইলটি বাছাই করা দরকার না:

import collections
import fileinput
import json

print(json.dumps(collections.Counter(map(str.strip, fileinput.input())), indent=2))

আউটপুট:

$ cat filename | python3 script.py
{
  "red apple": 1,
  "green apple": 2,
  "orange": 3
}

অথবা আপনি একটি সাধারণ ওয়ান-লাইনার ব্যবহার করতে পারেন:

$ cat filename | python3 -c 'print(__import__("json").dumps(__import__("collections").Counter(map(str.strip, __import__("fileinput").input())), indent=2))'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.