क्यों समान सॉर्ट कुंजी के साथ लाइनों का क्रम बदल रहा है?


31

यहाँ डेटा है:

D 2
B 2
A 2

जब मैं यह कमांड चलाता हूं:

sort -k2,2 file

यह आउटपुट:

A 2
B 2
D 2

मेरा सवाल यह है कि जब मैं केवल दूसरे कॉलम को निर्दिष्ट करता हूं -k2,2, तो ऐसा क्यों है कि यह पहले कॉलम के अनुसार भी है? चूंकि दूसरे कॉलम के सभी मान समान हैं, इसलिए इसे इसे वैसे ही छोड़ देना चाहिए।


7
[सेमी-ओटी]: FYI, एक प्रकार जो इनपुट ऑर्डर को संरक्षित करता है जब कंप्यूटर साइंस में सॉर्ट कीज़ मैच को स्थिर सॉर्ट के रूप में जाना जाता है । अक्सर सॉर्ट स्थिर नहीं होते हैं, क्योंकि कई गैर-स्थिर सॉर्ट एल्गोरिदम जल्दी या सरल होते हैं। यहां मामला नहीं है, लेकिन सीएस शब्द जानने से मैनपेज डॉक्स के लिए -sविकल्प समझ में आता है और खोजने योग्य है।
derobert

जवाबों:


34

वह अंतिम उपाय है तुलना । दो पंक्तियों की तुलना करते समय, यदि सभी कुंजियाँ समान होती हैं, तो अंतिम उपाय के रूप में, संपूर्ण पंक्तियों की एक मूल स्ट्रिंग तुलना की जाती है (फिर -rभी लागू होती है लेकिन अन्य विकल्प नहीं)। यह व्यवहार POSIX द्वारा निर्दिष्ट किया गया है :

को छोड़कर जब -u विकल्प निर्दिष्ट किया जाता है, तो समान रूप से तुलना करने वाली रेखाओं को आदेश दिया जाएगा जैसे कि विकल्पों में से कोई भी, -f, -i, -n, या -k मौजूद थे (लेकिन -r अभी भी प्रभाव में है, यदि यह निर्दिष्ट किया गया था) और लाइनों के सभी बाइट्स के साथ तुलना करने के लिए महत्वपूर्ण है। जिस क्रम में लाइनें अभी भी बराबर की तुलना में लिखी जाती हैं वह अनिर्दिष्ट है।

GNU के साथ sort, उस अंतिम-रिज़ॉर्ट तुलना को -s( स्थिर के लिए ) विकल्प के साथ अक्षम किया जा सकता है।

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