केस-संवेदी द्वारा 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.