सॉर्ट कमांड का गलत व्यवहार?


14

मैंने Ubuntu डेस्कटॉप 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 लिए मैं आपको एक छोटा पुरस्कार ट्रॉफी सौंपता हूं ।
डेविड फ़ॉस्टर 01

3
@DavidFoerster की टिप्पणी ओर इशारा करते हुए की है कि आप की जगह ले सकता है एक अजीब तरीका है cat test.txt | sortद्वारा sort test.txt:)
वोल्कर सीगल

@VolkerSiegel: सच है, हालांकि catशुरू करने के लिए उपयोगी सूत्र हैं । उदाहरण के लिए cat FILE | grep dev | sort, उनमें (क्रमबद्ध क्रम में) "देव" के साथ केवल लाइनें प्रदर्शित होंगी। उपयोग sort FILE | grep devकरने से एक ही उत्पादन होता है लेकिन रंगीन होता है।
AlainD

जवाबों:


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 है, सॉर्टिंग ऑर्डर बाइट मानों पर आधारित है।

साथ ही, @KenMollerup ने बताया, से बोली 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सभी गैर अल्फ़ान्यूमेरिकल वर्णों को अनदेखा कर देंगे।


क्षमा करें, यह नहीं देखा, मैंने टिप्पणी पर प्रतिक्रिया व्यक्त की!
केन मोलेरुप

@KenMollerup को इंगित करने के लिए धन्यवाद man sort। मैंने इसे नोटिस नहीं किया
c0rp

8

सॉर्ट वर्णानुक्रमिक और संख्यात्मक छँटाई का उपयोग करता है, हमारे जैसे ही, विशेष वर्ण जैसे + - <> ... को अनदेखा किया जाता है, संख्याओं का संख्यात्मक रूप से इलाज किया जाता है इसलिए 1, 2, 3 .. 11 से पहले आता है, 12 1066 1104 - देखें!

तो आपकी सूची के रूप में देखा जाता है: आ, अब, अब, एसी, एसी


क्या इसके लिए कोई विकल्प है, जैसे कि यह विशेष वर्णों को नजरअंदाज नहीं करेगा जैसे कि test.txt वांछित तरीके से सॉर्ट करेगा?
डग स्माइथीज

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

@KenMollerup, कृपया अपने उत्तर में और जानकारी जोड़ें। उद्धरण जोड़ें man sort, उदाहरण जोड़ें।
c0rp

हां, लेकिन मैं बहुत धीमा था, c0rp का जवाब नीचे देख रहा हूं।
केन मोलेरुप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.