अद्यतन उत्तर:
मुसीबत:
ओपी को फ़ाइलों में सकारात्मक पूर्णांक की तुलना करते समय " फाइल क्रमबद्ध क्रम में नहीं है " के बारे में एक त्रुटि प्राप्त हो रही है , पाठ नहीं। इसलिए हम गैर-दशमलव संख्या के साथ काम कर रहे हैं।comm
संक्षिप्त जवाब:
आपूर्ति करने के लिए उपयोग किए गए परिणामों को क्रमबद्ध करने के लिए उपयोग किए गए आदेश के -n
साथ स्विच के उपयोग के आधार पर , लौटाए गए परिणामों का क्रम बहुत अलग हो सकता है:sort
comm
comm
लेक्सोग्राफिक : -n
सॉर्ट के साथ स्विच का उपयोग "पॉजिटिव इंटेगर" के परिणामस्वरूप बढ़ती संख्याओं की एक श्रृंखला में किया जाएगा। " त्रुटि " comm
स्विच का उपयोग करके दबाया जा सकता है--nocheck-order
बाइट ऑर्डर : के साथ कोई उपयोग नहीं है । आदेश को निर्धारित करता है जो होस्ट द्वारा सेट किए गए आदेश पर कैसे लागू होता है, इसके अनुसार भी भिन्न हो सकता है। यह इनपुट डिफ़ॉल्ट रूप से अपेक्षित है। इसके बारे में थोड़ा और यहाँ पाया जा सकता है: Reference1 और Reference2-n switch
sort
LC_COLLATE
locale
comm
LC_COLLATE
क्या त्रुटि एक समस्या है?
यह इस बात पर निर्भर करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं। जैसा कि आप नीचे दिए गए उदाहरणों में देखेंगे,comm
फ़ाइलों को 's'स्विच के साथ या उसके बिना तुलना करने के बाद समान परिणाम देता है, भले ही उनका ऑर्डर ऊपर दिए गए तरीके के आधार पर अलग-अलग होगा, चाहेवहकमांड केसाथ प्रयोग किया गया हो। स्वयं, मैं "लेक्सोग्राफ़िक" के लिए आदेश दिए गए परिणाम- संख्याएँ जो एक श्रृंखला में बढ़ती हैं।sort
-n
-n switch
sort
हालाँकि यदि आप " lexographic " क्रम में परिणाम नहीं चाहते हैं , तो तुलना के लिए आपूर्ति किए गए डेटा को सॉर्ट करते समय स्विच का उपयोग न करें ।-n
comm
परिक्षण:
हम स्विच के comm
साथ और बिना कमांड के परिणामों की तुलना करेंगे -n
। मैंने कुसलानंद के अनुरोध के अनुसार अपने नमूना परीक्षण डेटा सेट की जटिलता बढ़ाई है:
टेस्ट डेटा :
file1.txt :
40
110000
2200
6
33000
file2.txt :
2200
40
33000
6
440000
प्रतिच्छेदन :
BOTH फ़ाइलों के लिए केवल सामान्य संख्याओं की सूची बनाएं
-n
स्विच के बिना :
comm -12 <(sort file1.txt) <(sort file2.txt)
2200
33000
40
6
परिणाम : सही, लेकिन संयुक्त राष्ट्र के आदेश में वापस आ गया
-n
स्विच के साथ :
comm -12 <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
comm: file 1 is not in sorted order
परिणाम : सही है, लेकिन एक LEXOGRAPHIC क्रमबद्ध क्रम में वापस आ गया । ऑपरेशन सफलतापूर्वक पूरा हुआ और स्विच के comm
बिना उपयोग के समान परिणाम लौटाए -n
, लेकिन क्रमबद्ध सूची में।
अंतर :
प्रत्येक फ़ाइल के लिए केवल अद्वितीय संख्याएँ सूचीबद्ध करें:
-n
स्विच के बिना :
comm -3 <(sort file1.txt) <(sort file2.txt)
110000
440000
परिणाम : सही- ये नंबर वास्तव में प्रत्येक संबंधित फ़ाइल के लिए अनन्य हैं।
-n
स्विच के साथ :
comm -3 <(sort -n file1.txt) <(sort -n file2.txt)
110000
comm: file 1 is not in sorted order
440000
परिणाम : सही, स्विच के comm
बिना ही परिणाम -n
, लेकिन सकारात्मक पूर्णांकों के क्रम के बारे में त्रुटि को स्वयं फ़ाइलों में क्रमबद्ध नहीं किया जा रहा है।
LEXOGRAPHIC परिणामों के लिए समाधान:
त्रुटि संदेश को दबाने के लिए comm
`s --nocheck-order
स्विच का उपयोग करें । चूँकि हम जानते हैं कि संख्याएँ प्रत्येक फ़ाइल में क्रमबद्ध नहीं हैं, लेकिन इसके द्वारा लौटाए गए परिणाम comm -n
सही हैं, त्रुटि को इसे दबाकर सुरक्षित रूप से अनदेखा किया जा सकता है:
प्रतिच्छेदन :
comm -12 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
अंतर :
comm -3 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
110000
440000
निष्कर्ष:
त्रुटि " फ़ाइल सॉर्ट किए गए क्रम में नहीं है " जब सकारात्मक सॉर्टर्स को खिलाया जाता comm
है, तो इसका मतलब यह नहीं है कि -n
स्विच का उपयोग करके लौटाए गए परिणाम comm
गलत हैं। वास्तव में, comm -n
क्रमबद्ध क्रम में एक सही तरीके से रिटर्न का उपयोग करना!
@Dhag, @kusalananda @ChrisDown को उन मुद्दों को उठाने के लिए धन्यवाद, जिन्हें और विस्तार की आवश्यकता थी। हमेशा मेरे काम की समीक्षा करने में खुशी होती है: हम बेहतर हो सकते हैं, केवल एक ही तरीका है अगर हम लगातार अपने साथियों द्वारा धकेल दिए जाते हैं और चुनौती देते हैं।