সর্ট কমান্ডের ভুল আচরণ?


14

আমি উবুন্টু ডেস্কটপ 14.04 (ট্রাস্টি তাহর) এ একটি ফাইলের বিষয়বস্তু বাছাই করার চেষ্টা করেছি । আমার ক্ষেত্রে, প্রত্যাশিত ফলাফলটি মূল সামগ্রী হিসাবে একই হওয়া উচিত, তবে আসল ফলাফলটি তা নয়। কেন?

# cat test.txt
a++-a
a++-b
a++-c
ab
ac
# cat test.txt | sort
a++-a
ab
a++-b
ac
a++-c

4
আপনার অকেজো ব্যবহারেরcat জন্য আপনাকে একটি ছোট পুরষ্কার ট্রফি উপহার দিচ্ছি ।
ডেভিড ফোস্টার

3
@ ডেভিডফোস্টার এর মন্তব্যটি আপনার cat test.txt | sortদ্বারা প্রতিস্থাপন করতে পারে এমন একটি মজাদার উপায় sort test.txt:)
ভলকার সিগেল

@ ভোলকারসিগেল: সত্য, যদিও শুরু করার জন্য দরকারী সূত্রগুলি রয়েছে cat। উদাহরণস্বরূপ, cat FILE | grep dev | sortকেবলমাত্র তাদের মধ্যে "দেব" সহ লাইনগুলি প্রদর্শিত হবে (সাজানো ক্রমে)। ব্যবহার sort FILE | grep devএকই আউটপুট কিন্তু রঙিন উত্পাদন করে।
আলাইনড

উত্তর:


17

আপনি LC_ALLভেরিয়েবল ব্যবহার করতে পারেন , LC_ALL=Cকল করার আগে এটি সেট করতে পারেনsort

$ LC_ALL=C sort test.txt
a++-a
a++-b
a++-c
ab
ac

এই উত্তরটি পড়ুন , যদি আপনি জানতে চান তবে এটি যাদুবিদ্যার কী LC_ALL=C। এখানে সংক্ষিপ্তসার:

সি লোকেল একটি বিশেষ লোকেল যা বোঝানো হয় সহজতম লোকেল। আপনি আরও বলতে পারেন যে অন্যান্য লোকেলগুলি মানুষের জন্য, সি লোকেল কম্পিউটারের জন্য। সি লোকালে অক্ষরগুলি একক বাইট হয়, চরসেটটি ASCII হয়, বাছাই ক্রম বাইট মানগুলির উপর ভিত্তি করে।

এছাড়াও, @ কেনমল্লারুপ নির্দেশিত হিসাবে, থেকে উদ্ধৃতি man sort

   ***  WARNING  ***  The locale specified by the environment affects sort
   order.  Set LC_ALL=C to get the traditional sort order that uses native
   byte values.

সুতরাং সাজানোর সাথে ব্যবহার করার সময় LC_ALL=C, বাছাই করে প্রতীকগুলি বাইপাশে তুলনা করুন। অন্যথায় sortসমস্ত অক্ষর অক্ষরকে উপেক্ষা করবে।


দুঃখিত এটি দেখতে পায় নি, আমি মন্তব্য প্রতিক্রিয়া!
কেন মোলার্প

নির্দেশিত করার জন্য @ কেনমোলরূপ ধন্যবাদ man sort। আমি এটি লক্ষ্য করিনি
c0rp

8

বাছাই করা বর্ণমালা এবং সংখ্যাসমূহ অনুসারে বাছাই করে, আমাদের মতো একই, + - <> ... এর মতো বিশেষ অক্ষরকে অগ্রাহ্য করা হয়, সংখ্যাগুলিকে সংখ্যাসূচক হিসাবে ধরা হয় তাই 1, 2, 3 .. 11, 12 1066 1104 এর আগে আসে - দেখুন!

সুতরাং আপনার তালিকা হিসাবে দেখা হয়: আ, আব, আব, এসি, এসি


বাছাইয়ের জন্য কোনও বিকল্প রয়েছে, যেমন এটি পরীক্ষা করে বিশেষ অক্ষরকে অগ্রাহ্য করবে না t
ডগ স্মিথিজ

6
এটি ম্যান সাজানোর ক্ষেত্রে দেখুন: *** সতর্কতা *** পরিবেশ দ্বারা নির্দিষ্ট করা লোকেল বাছাইয়ের ক্রমকে প্রভাবিত করে। দেশীয় বাইট মান ব্যবহার করে এমন traditionalতিহ্যবাহী বাছাই ক্রম পেতে LC_ALL = C সেট করুন।
কেন মোলার্প

@ কেনমোলারুপ, দয়া করে আপনার উত্তরে আরও তথ্য যুক্ত করুন। থেকে উদ্ধৃতি man sortযোগ করুন, উদাহরণ যুক্ত করুন।
c0rp

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