2010-08-01 11 views
36

में क्रमबद्ध करें और अनिक करें आदेशों के बीच निम्नलिखित अंतर क्या है?लिनक्स खोल

sort -u FILE 

sort FILE | uniq 
+0

जब आप उन्हें भागते थे, तो आपने क्या देखा? क्या आपने विभिन्न आकार की फ़ाइलों के लिए समय अंतर एकत्र करने का प्रयास किया था? आप कुछ प्रयोग चला सकते हैं और परिणाम पोस्ट कर सकते हैं आपके प्रश्न का हिस्सा हैं। –

+0

मैं जानना चाहता हूं कि क्या कोई विशेष मामला अलग-अलग व्यवहार करता है, सामान्य निष्पादन में वे दोनों एक ही परिणाम देते हैं – yassin

+3

["सॉर्ट-यू" और "सॉर्ट" के बीच क्या अंतर है। uniq "?] (http://unix.stackexchange.com/q/76049/17265) – mtk

उत्तर

59

sort -u का उपयोग sort | uniq से कम I/O करता है, लेकिन अंतिम परिणाम समान होता है। विशेष रूप से, यदि फ़ाइल काफी बड़ी है कि sort को इंटरमीडिएट फाइलें बनाना है, तो एक अच्छा मौका है कि sort -u थोड़ा कम या थोड़ा छोटी इंटरमीडिएट फाइलों का उपयोग करेगा क्योंकि यह डुप्लिकेट को खत्म कर सकता है क्योंकि यह प्रत्येक सेट को सॉर्ट कर रहा है। यदि डेटा अत्यधिक डुप्लिकेटिव है, तो यह फायदेमंद हो सकता है; यदि वास्तव में कुछ डुप्लिकेट हैं, तो यह पाइप के पहले ऑर्डर प्रभाव की तुलना में बहुत अंतर नहीं करेगा (निश्चित रूप से दूसरा ऑर्डर प्रदर्शन प्रभाव)।

ध्यान दें कि पाइपिंग उचित होने पर कई बार ध्यान दिया जाता है।

sort FILE | uniq -c | sort -n 

इस फ़ाइल में प्रत्येक पंक्ति की घटनाओं की संख्या के आदेश में फ़ाइल सॉर्ट करता है, सबसे अधिक बार-बार लाइनों पिछले प्रदर्शित होने के साथ: उदाहरण के लिए। (यह मुझे आश्चर्यचकित नहीं करेगा कि यह संयोजन, जो यूनिक्स या पॉज़िक्स के लिए बेवकूफ है, को जीएनयू सॉर्ट के साथ एक जटिल 'सॉर्ट' कमांड में रखा जा सकता है।)

ऐसे समय होते हैं जब पाइप का उपयोग नहीं करना महत्वपूर्ण होता है । उदाहरण के लिए:

sort -u -o FILE FILE 

यह फ़ाइल 'सीटू' में टाइप करता है; यानी, आउटपुट फ़ाइल को -o FILE द्वारा निर्दिष्ट किया गया है, और यह ऑपरेशन सुरक्षित है (आउटपुट के लिए अधिलेखित होने से पहले फ़ाइल को पढ़ा जाता है)।

+0

पूर्ण उत्तर के लिए धन्यवाद! – yassin

+0

gnu सॉर्ट में सभी प्रकार का करने का कोई तरीका नहीं है uniq -c | sort -n', और न ही मुझे कुशलतापूर्वक करने के लिए कोई अन्य टूल मिला है। कोड करने के लिए एक सार्थक चीज़ की तरह लगता है। – mc0e

2

कुछ भी नहीं है, वे क्योंकि यह पाइप के दो आदेशों

के बीच उत्पादन की जरूरत नहीं है भी विषय पर मेरे सवाल देखते हैं, एक ही परिणाम

10

एक मामूली अंतर है: वापसी कोड।

बात यह है कि जब तक shopt -o pipefail सेट नहीं किया जाता है तब तक पाइप कमांड का रिटर्न कोड अंतिम कोड का कोड वापस आ जाएगा। और uniq हमेशा शून्य (सफलता) देता है। (pipefail यहाँ सेट नहीं है) से बाहर निकलने के कोड की जांच की कोशिश करो, और आप कुछ इस तरह दिखाई देंगे:

[email protected] ~ $ sort -u file_that_doesnt_exist ; echo $? 
sort: open failed: file_that_doesnt_exist: No such file or directory 
2 
[email protected] ~ $ sort file_that_doesnt_exist | uniq ; echo $? 
sort: open failed: file_that_doesnt_exist: No such file or directory 
0 

इस के अलावा, आदेशों बराबर हैं।

0

मैंने कुछ सर्वरों पर काम किया है जहां सॉर्ट '-u' विकल्प का समर्थन नहीं करता है। वहां हमें

sort xyz | uniq 
+1

क्या आप यह निर्दिष्ट करना चाहते हैं कि कौन से सर्वर ओएस संस्करण और कब, मोटे तौर पर? 7 वां संस्करण यूनिक्स ™ 'सॉर्ट' समर्थित '-यू' और यह यूनिक्स का पहला व्यापक रूप से उपयोग किया जाने वाला संस्करण था, इसलिए अन्य सभी (सिस्टम III, सिस्टम वी, बीएसडी, इत्यादि) इसका पालन करने के लिए प्रतिबद्ध थे, इसलिए मैं वास्तव में आश्चर्यचकित हूं यूनिक्स जैसी प्रणाली को खोजने के लिए जहां 'sort'' -u' का समर्थन नहीं करता था। –

6

सावधान रहना होगा! हालांकि यह सच है कि "sort -u" और "sort | uniq" बराबर हैं, सॉर्ट करने के लिए कोई भी अतिरिक्त विकल्प समानता को तोड़ सकता है। कोर्यूटिल्स मैनुअल से एक उदाहरण यहां दिया गया है:

उदाहरण के लिए, 'sort -n -u' विशिष्टता की जांच करते समय प्रारंभिक संख्यात्मक स्ट्रिंग का केवल मान का निरीक्षण करता है, जबकि 'sort -n | uniq 'पूरी लाइन का निरीक्षण करता है।

इसी प्रकार, यदि आप प्रमुख फ़ील्ड को सॉर्ट करते हैं, तो सॉर्ट द्वारा उपयोग की जाने वाली विशिष्टता परीक्षा पूरी लाइन को अब आवश्यक नहीं लगेगी।अतीत में उस बग द्वारा काटने के बाद, इन दिनों मैं बैश स्क्रिप्ट लिखते समय "sort | uniq" का उपयोग करता हूं। मैं जोखिम को चलाने के बजाय उच्च I/O ओवरहेड चाहता हूं कि दुकान में किसी और को उस विशेष गड़बड़ी के बारे में पता नहीं चलेगा जब वे अतिरिक्त कोड पैरामीटर जोड़ने के लिए मेरे कोड को संशोधित करते हैं।

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