केस-संवेदी द्वारा GNU सॉर्ट


35

sortउबंटू 10.04 (स्पष्ट) में उपयोगिता हमेशा प्रकार केस-संवेदी द्वारा, जैसे आपके द्वारा निर्दिष्ट करता है, तो --ignore-caseयह करने के लिए।

The two sort just give the same result: 

echo -e "c\nb\nB\na" | sort
echo -e "c\nb\nB\na" | sort --ignore-case

लेकिन कभी-कभी मैं केस-सेंसिटिव द्वारा छांटना चाहता हूं, इसलिए अपर-केस लेटर्स पहले आते हैं, फिर लो-केस लेटर। क्या यह संभव है?

जवाबों:


31

टकराव आदेश को ओवरराइड करें।

echo -e "c\nb\nB\na" | LC_COLLATE=C sort

5
यह काम करता है, लेकिन परिभाषा के अनुसार यदि कोई विदेशी वर्ण नहीं है। खेल में हैं; वे 7-बिट ASCII पत्रों के बाद सॉर्ट करेंगे ; कोशिश करो echo $'B\nÄ\nb\na' | LC_COLLATE=C sort। यह तथ्य नहीं होना चाहिए कि sortगैर- Cस्थानीय लोगों के साथ GNU हमेशा केस करता है-असंवेदनशील छंटाई को बग माना जाता है ?
— mklement0

"विदेशी पात्रों" के बारे में , गैर-एससीआई यूटीएफ -8 वर्ण "सामान्य रूप से" का इलाज करते समय, C.UTF-8स्थानीय ( LC_COLLATE=C.UTF-8) केस-संवेदी रूप से सॉर्ट करेगा। दुर्भाग्य से, यह glibc में अपस्ट्रीम उपलब्ध नहीं है और केवल डेबियन, उबंटू और डेरिवेटिव द्वारा पैच किया गया है।
— aplaice

13

दिलचस्प है, अभी तक एक और तरह का आदेश उपलब्ध है:

echo -e "c\nb\nB\na" | LC_COLLATE=C sort --ignore-case

जो अपने निचले अक्षर से पहले अपरकेस अक्षर डालता है।

यहाँ उनके आउटपुट की तुलना है (मैंने "d" और "D") को en_US.UTF-8लोकेल में जोड़ा (जहां ओवरराइड को छोड़कर):

  1. echo -e "d\nD\nc\nb\nB\na" | sort
  2. echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case
  3. echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort
  4. echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort --ignore-case

आउटपुट:

1   2   3   4
-   -   -   -
a   a   B   a
b   b   D   B
B   B   a   b
c   c   b   c
d   d   c   D
D   D   d   d

दिलचस्प; मैं जीएनयू में इस व्यवहार को देख sort v5.93और (ओएस एक्स 10.9.3 (साथ आता है!)) v8.13, लेकिन नहीं में v8.21और v8.22। मुझे लगता है कि 2. और 4 के परिणामों को अभी भी समतुल्य माना जा सकता है (लेकिन यह स्पष्ट रूप से विदेशी पात्रों के साथ बदल जाएगा)।
— mklement0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.