একক কী দ্বারা বাছাই করতে GNU বাছাই / অন্যান্য কীগুলি বাছাই করা বাছাই করতে ব্যবহার করুন


9

আমার কাছে একটি ফাইল রয়েছে যা ইতিমধ্যে অর্ডার করা ডেটা রয়েছে এবং আমি অন্য কীগুলির মধ্যে ডেটার ক্রম বিনষ্ট না করেই একটি কীতে মানগুলি অনুসারে ফাইলটিকে পুনরায় অর্ডার করতে চাই।

আমি উল্লেখ না করে কীগুলির মানগুলির ভিত্তিতে সারি বাছাই করা থেকে জিএনইউ বাছাই করা থেকে কীভাবে বাধা দেব বা বাছাই করার সময় আমি কীভাবে জিএনইউ সাজ্টকে নির্দিষ্ট করব?

ফাইল ডেটা টেক্সট:

1 Don't
2 C 
1 Sort
2 B
1 Me
2 A

প্রত্যাশিত আউটপুট:

1 Don't
1 Sort
1 Me
2 C
2 B
2 A

COMMAND:

sort -k 1,1 <data.txt

ফলাফল: অযাচিত বাছাইয়ের জন্য আমি জিজ্ঞাসা করি নি:

1 Don't
1 Me
1 Sort
2 A
2 B
2 C

উত্তর:


21

আপনার একটি স্থিতিশীল বাছাই করা দরকার । থেকে man sort:

-s, --stable
       stabilize sort by disabling last-resort comparison

যেমন .:

$ sort -sk 1,1 <data.txt
1 Don't
1 Sort
1 Me
2 C 
2 B
2 A

নোট করুন যে আপনি সম্ভবত একটি -nবা --numeric-sortআপনার চাবিটি যদি সংখ্যাসূচক হয় তবে (উদাহরণস্বরূপ, ডিফল্ট - লেজিকাল - সাজানোর ক্রমের সাথে 10 থেকে 2 এর তুলনা করার সময় আপনি অপ্রত্যাশিত ফলাফল পেতে পারেন)। এই ক্ষেত্রে এটি করার বিষয়টি:

sort -sn <data.txt

পুরো ক্ষেত্রের সংখ্যাসূচক ব্যাখ্যা প্রথম ক্ষেত্রের একটির মতো হবে বলে প্রথম ক্ষেত্রটি বের করার দরকার নেই।



আমি ডকগুলি পড়েছি তবে "স্থিতিশীল" এর যথাযথ সংজ্ঞা আমার দৃষ্টি আকর্ষণ করে। দ্রুত, সংক্ষিপ্ত এবং ভাল উদ্ধৃত প্রতিক্রিয়ার জন্য ধন্যবাদ। আসল ডেটার প্রথম কীটি স্থানীয়ীকৃত স্ট্রিং, তাই সংখ্যাটি আমার পক্ষে কাজ করবে না।
Wil

4

(নন-জিএনইউ) sortবাস্তবায়নের জন্য যে -sবিকল্পের অভাব রয়েছে , আপনি সর্বদা এটি করতে পারেন:

<data.txt awk '{print NR "\t" $0}' | sort -n -k 2,2 -k 1,1 | cut -f 2-

এটি, দ্বিতীয় ক্রম কী তৈরি করতে লাইন নম্বরটি প্রিপেন্ড করুন এবং তারপরে স্ট্রিপ করুন।

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