2011-08-23 7 views
6

[यह एक समान प्रश्न का पुनर्लेख है जिसे मैंने पीछे पूछा था ... भ्रम के लिए खेद है!]यूनिक्स सॉर्ट यूटिलिटी विकल्प के बिना अग्रणी रिक्त स्थान को अनदेखा क्यों करती है?

मैं अग्रणी एस और मानक sort उपयोगिता के बारे में उलझन में हूं। myfile की सामग्री पर विचार करें:

a 
b 
    a 

निष्पादित sort -t : myfile कोई अनपेक्षित परिणाम पैदावार, कम से कम मेरे लिए:

a 
    a 
b 

कि मतलब है? <space> या तो a-z (जैसा कि ASCII में है), या उसके बाद आना चाहिए। पहले मामले में मैं

a 
b 
a 

उम्मीद होती है, जबकि दूसरे मामले में

a 
b 
    a 

क्यों, फिर, है sort (उपेक्षा प्रमुख रों) -b विकल्प लागू करने के लिए करता है, तो जब यह शामिल नहीं किया गया प्रतीत ? असल में, सुरक्षित होने के लिए मैंने प्रत्येक पंक्ति में बिल्कुल एक फ़ील्ड रखने के लिए -t विकल्प जोड़ा। (According to the POSIX standard, "एक क्षेत्र गैर-अलग वर्ण और विकल्प आयकर, किसी भी पूर्ववर्ती क्षेत्र विभाजक के अभाव में, की अधिकतम अनुक्रम शामिल हैं।" sort myfile पैदावार एक ही उत्पादन है, जो भी अप्रत्याशित है।)

अग्रिम धन्यवाद !

उत्तर

9

यह स्थान पर निर्भर करता है।

LC_COLLATE=en_US.utf8 sort myfile 

के साथ मैं अपने अप्रत्याशित परिणाम मिलता है, और

LC_COLLATE=C sort myfile 

साथ मैं अपने अपेक्षित परिणाम मिलता है। यह भी देखें bash sort unusual order. Problem with spaces?

(मैं नहीं जानता क्यों प्रकार बी संभालती है और इस तरह आयकर।)

+0

+1: विनम्रता :) –

+0

@Ernest: इस के लिए पर्याप्त! मैंने नम्रता को हटा दिया। –

+0

धन्यवाद! कैसे en_US.UTF-8 के तहत काम करता है, मैं इसे या तो समझ नहीं सकता ... [colletion chart] (http://www.collation-charts.org/opensolaris/opensolaris.2008.05.en_US.UTF- 8.html) en_US.UTF-8 के लिए ए और बी के बीच कोई स्थान नहीं है ... –

7
$ sort -t : foo 
a 
    a 
    b 
$ env LC_ALL=C sort -t: foo 
    a 
    b 
a 

आदमी पृष्ठ से: * चेतावनी * स्थान पर्यावरण द्वारा निर्दिष्ट सॉर्ट क्रम को प्रभावित करता है। स्थानीय बाइट मानों का उपयोग करने वाले पारंपरिक सॉर्ट ऑर्डर प्राप्त करने के लिए LC_ALL = C सेट करें।

संबंधित मुद्दे