প্রথম কলামের উত্থানের ক্রমে ডেটা বাছাই করুন, সমান মানগুলির জন্য, উত্থিত ক্রমে দ্বিতীয় কলামটি ব্যবহার করুন


22

আমাকে পরিষ্কার করার অনুমতি দিন:

ধরুন আমার ব্যবহারের ফ্রিকোয়েন্সি সহ কিছু কীওয়ার্ড রয়েছে:

12 Hi
7  Hash
7  C++  
9  Superuser
17 Stackoverflow
9  LaTeX  
42 Life
9  Ubuntu

আমি যা চাই তা হ'ল ক্রমান্বয়ে ক্রম ভিত্তিতে এই ডেটাটিকে সাজানো এবং যদি কিছু সমান মান থাকে তবে এটি দ্বিতীয় কলামটি আরোহণের ক্রমে ব্যবহার করা উচিত।

sort -n -r foo.txt

প্রথম অংশটি কিন্তু দ্বিতীয় স্তম্ভটিও হ'ল reversed:

42 Life
17 Stackoverflow
12 Hi
9  Ubuntu
9  Superuser
9  LaTeX  
7  Hash
7  C++

আমি কীভাবে নিম্নলিখিত ফলাফলগুলি অর্জন করতে পারি?

42 Life
17 Stackoverflow
12 Hi
9  LaTeX  
9  Superuser
9  Ubuntu
7  C++ 
7  Hash

আমি মনে করি আমাকে -kযুক্তি ব্যবহার করতে হবে তবে আমি বুঝতে পারি না কীভাবে!

আমি জানতে চাই কিভাবে এই একমাত্র ব্যবহার করা যাবে চান sortনির্দেশে bash। তবে এটির মাধ্যমে এটি অর্জন করা যদি সম্ভব না হয় তবে sortঅন্যান্য কমান্ডগুলি বোর্ন শেল সামঞ্জস্যপূর্ণ হওয়া উচিত।


[কিছুটা ওটি]: যদিও এই নির্দিষ্ট-ডেটার সমতুল্য, সংখ্যাগত তুলনার -gপরিবর্তে জিএনইউ-সাজ্ট (সাধারণ সংখ্যাসূচক) বিকল্পটি ব্যবহার -nকরা নিরাপদ: এটি ভাসমান পয়েন্ট এবং পূর্ণসংখ্যার উভয়ের জন্যই সঠিকভাবে কাজ করে।
আরিলফ

উত্তর:


32

মাপদণ্ডের সাথে আলাদাভাবে বাছাই কীগুলি নির্দিষ্ট করুন:

sort -k1,1nr -k2,2 inputfile

এটি নির্দিষ্ট করে যে প্রথম কীটি সংখ্যার দিক থেকে বিপরীত ক্রমে সাজানো হয় যখন দ্বিতীয়টি ডিফল্ট সাজানোর ক্রম অনুসারে বাছাই করা হয় ।

পসিক্স বাছাই করা থেকে উদ্ধৃতি :

-k keydef

Keydef যুক্তি সীমাবদ্ধ সাজানোর কী ক্ষেত্র সংজ্ঞা। এই সংজ্ঞার বিন্যাসটি হ'ল:

ফিল্ড_স্টার্ট [ প্রকার ] [ , ক্ষেত্রের_দ্বারা [ প্রকার ]]

যেখানে ফিল্ড_স্টার্ট এবং ফিল্ড_এন্ড লাইনের একটি অংশের মধ্যে সীমাবদ্ধ একটি মূল ক্ষেত্রকে সংজ্ঞায়িত করে (বর্ধিত বর্ণন বিভাগটি দেখুন), এবং টাইপগুলি 'বি', 'ডি', 'এফ', 'আই', 'অক্ষরের তালিকা থেকে একটি সংশোধক হবে এন ',' আর '। 'বি' সংশোধক -bবিকল্পটির মতো আচরণ করবে তবে এটি কেবল ফিল্ড_স্টার্ট বা ফিল্ড_এন্ডের সাথে প্রয়োগ করা হবে যার সাথে এটি সংযুক্ত রয়েছে। অন্যান্য সংশোধকরা সংশ্লিষ্ট বিকল্পগুলির মতো আচরণ করবে তবে তারা যে মূল ক্ষেত্রটি সংযুক্ত রয়েছে কেবল তার ক্ষেত্রেই প্রয়োগ করবে; ফিল্ড_স্টার্ট , ফিল্ড_সেন্ড বা উভয়ের সাথে নির্দিষ্ট করা থাকলে তাদের এই প্রভাব থাকবে ।, কোনও বিকল্প প্রয়োগ করা হবে না। প্রয়োগগুলি -kবিকল্পের কমপক্ষে নয়টি ঘটনা সমর্থন করবে যা কমান্ড লাইন ক্রমে উল্লেখযোগ্য হবে। যদি কোনও -kবিকল্প নির্দিষ্ট না করা থাকে, তবে পুরো লাইনের একটি ডিফল্ট বাছাই কী ব্যবহার করা হবে।

যখন একাধিক কী ক্ষেত্র থাকে, পরে সমস্ত কীগুলি সমান তুলনা করার পরে কেবল কীগুলি তুলনা করা হবে। ব্যতীত যখন -uঅপশন উল্লেখিত থাকে, লাইন অন্যথায় সমান তুলনা যেন আদেশ হইবে বিকল্পগুলির একটিও -d, -f, -i, -n, অথবা -kছিল বর্তমান (কিন্তু সঙ্গে -r এখনও পর্যন্ত, এটা উল্লেখ করা হলে) এবং লাইনে উল্লেখযোগ্য সমস্ত বাইট সঙ্গে তুলনা। যে রেখাগুলিতে এখনও সমান তুলনা করা হয়েছে তা অনির্দিষ্ট।

এটি উত্পাদন করবে:

42 Life
17 Stackoverflow
12 Hi
9  LaTeX
9  Superuser
9  Ubuntu
7  C++
7  Hash

ধন্যবাদ। কৌতুকটি করেছেন। গ্রহণ করতে 10 মিনিট অপেক্ষা করতে হবে!
পৈয়া

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