लिनक्स सॉर्ट का डिफ़ॉल्ट क्रम क्या है?


18

एक लंबी अवधि के लिए मुझे लगा कि sortकार्यक्रम का डिफ़ॉल्ट व्यवहार ASCII के आदेश का उपयोग कर रहा है। हालांकि, जब मैं निम्नलिखित sortतर्कों को बिना किसी तर्क के इनपुट करता हूं :

#
@

मुझे मिला:

@
#

लेकिन ASCII तालिका के अनुसार, #35 है और @64 है। एक और उदाहरण है:

A
a

और आउटपुट है:

a
A

क्या कोई इसे समझा सकता है? वैसे, उपयोग करते समय 'डिक्शनरी-ऑर्डर' क्या है sort -d?


5
सॉर्ट ऑर्डर आपकी लोकेल सेटिंग पर निर्भर करता है
जनाब

2
लेकिन यह कम से कम GNU सॉर्ट में डिफ़ॉल्ट रूप से वर्णानुक्रम है।
जारो

जवाबों:


17

ऐसा लगता है कि आप एक गैर-POSIX लोकेल का उपयोग कर रहे हैं।

प्रयत्न:

export LC_ALL=C

और फिर sort

info sort स्पष्ट रूप से कहते हैं:

(1) यदि आप एक गैर- POSIX लोकेल का उपयोग करते हैं (उदाहरण के लिए, 'LC_ALL' को `en_US 'पर सेट करके), तो` सॉर्ट' ऐसे आउटपुट का उत्पादन कर सकता है, जो आपके आदी होने की तुलना में अलग तरह से सॉर्ट किया गया हो। उस स्थिति में, `LC_ALL 'पर्यावरण चर को` C' पर सेट करें। ध्यान दें कि केवल 'LC_COLLATE' की सेटिंग में दो समस्याएं हैं। सबसे पहले, यह अप्रभावी है यदि `LC_ALL 'भी सेट है। दूसरा, इसका अपरिभाषित व्यवहार है यदि `LC_CTYPE '(या` LANG', यदि `LC_CTYPE 'परेशान है) असंगत मान पर सेट है। उदाहरण के लिए, यदि आपको 'LC_CTYPE' `ja_JP.PCK 'है, लेकिन` LC_COLLATE' `en_US.UTF-8 'है तो आपको अपरिभाषित व्यवहार मिलता है।


3
ओपी पूछ रहा है कि सॉर्ट ऑर्डर क्या है, इसे कैसे बदलना है।

1
धन्यवाद, मैंने अपनी मशीन पर परीक्षण किया है और लोकेल सेटिंग्स सॉर्ट व्यवहार को प्रभावित करती हैं

3

सॉर्ट ऑर्डर को निर्धारित करने के लिए, बस प्रत्येक लाइन पर एक अलग चरित्र के साथ एक फ़ाइल बनाएं और इसे सॉर्ट करें। परिणामी आउटपुट आपको क्रमबद्ध क्रम बताएगा।


अच्छा, सरल और कुशल

1
आम तौर पर एक बहुत अच्छा विचार है, लेकिन यह हमेशा पर्याप्त नहीं होता है। एक कोलाजेशन को केवल व्यक्तिगत पात्रों पर परिभाषित नहीं किया जाना चाहिए। कुछ कोलाज "एई" का इलाज करते हैं जैसे कि यह एक संयुक्ताक्षर थे, या लिगुरेट्स का इलाज करते हैं जैसे कि वे विघटित हो गए थे। एक और मामला यह है कि कई समतुल्य 'ए' और 'ए' को समान मानते हैं, लेकिन परीक्षण द्वारा आप जो क्रम देखते हैं, वह आपको यह नहीं बताता है (यह आपको बता सकता है कि क्या प्रकार स्थिर है)। और एक एकल-वर्ण परीक्षण यह नहीं बताता है कि टैब विस्तार, व्हाट्सएप सामान्यीकरण, आदि प्रभाव में हैं। फिर भी, यह शुरू करने के लिए एक बहुत अच्छी जगह है।
टेक्स्टगीक

1
(पिछली टिप्पणी को संपादित करने के लिए बहुत देर हो चुकी है) - इसलिए जब तक आप वास्तव में वर्णों की एक विविध श्रेणी शामिल करते हैं, आप एएबी के बजाय एएबीबी (उदाहरण के लिए) देखने से मामले की अनदेखी बता सकते हैं।
टेक्स्टगीक

2

जैसा कि man sortकहा गया है, "शब्दकोश-ऑर्डर" का अर्थ है "केवल रिक्त और अल्फ़ान्यूमेरिक वर्णों पर विचार करें"। उदाहरण के लिए, डेटा दिया गया

The
!quick
brown
@fox
jumps
#over
17
$lazy
  dogs
%42
times.

अनियंत्रित sortकमांड उत्पन्न करता है

  dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.

(लाइनों है कि अंतरिक्ष अक्षर और के साथ शुरू डाल !, #, $, %, और @प्रतीकों 1 लाइनों कि अक्षर और संख्या के साथ शुरू से आगे; यानी, अक्षरांकीय अक्षर ), लेकिन sort -dपैदा करता है

  dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.

  dogsअभी भी पहले है, क्योंकि यह रिक्त स्थान से शुरू होता है, लेकिन विशेष (विराम चिह्न) वर्णों को अनदेखा किया जाता है।  17पहले आता है 42, और foxके बीच आता है brownऔर jumpsतथ्य यह है कि के बावजूद, 42और foxउनके सामने अक्षर है कि सामान्य रूप से पहले उन्हें स्थानांतरित होता है 17। उनके ASCII मूल्यों के क्रम में
____________
1 : अंतरिक्ष = 040, != 041, #= 043, $= 044, %= 045, और @= 0100। ध्यान दें कि (स्पेस बार की अवहेलना) यह कुछ कीबोर्ड पर लगभग बाएं से दाएं क्रम है।


1
आपके पहले उदाहरण में, जहां पाठ को विराम चिह्न पर पहले क्रमबद्ध किया गया है, परिणाम हो सकता है कि प्रभाव में स्थान C (LC_ALL = C के साथ) है, लेकिन अन्य स्थानों में नहीं। कौन सा स्थान डिफ़ॉल्ट है यह ओएस सेटिंग्स पर निर्भर करता है। इसलिए, कई डिस्ट्रीब्यूशन में एक अनडॉर्म्ड sort अलग होना चाहिए।
इसहाक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.