सरल उत्तर मेरे लिए काम नहीं करता क्योंकि मुझे लाइन के लिए comm
मैचों की लाइन का एहसास नहीं हुआ था, इसलिए एक फ़ाइल में डुप्लिकेट लाइनों को दूसरे में मौजूद नहीं होने के रूप में मुद्रित किया जाएगा। उदाहरण के लिए, यदि file1 निहित:
Alex
Bill
Fred
और करें 2 निहित:
Alex
Bill
Bill
Bill
Fred
फिर comm -13 file1 file2
उत्पादन होगा:
Bill
Bill
मेरे मामले में, मैं जानना चाहता था ही नहीं में हर स्ट्रिंग file2 फ़ाइल 1 में मौजूद है, इस पर ध्यान दिए बिना कि प्रत्येक फ़ाइल में कितनी बार पंक्ति आई थी।
समाधान 1: unix.stackexchange से (पहले "काम" जवाब मैंने पाया):
comm -13 <(sort -u file1) <(sort -u file2)
समाधान 2:-u
(अद्वितीय) झंडा sort
करने के लिए उपयोग
fgrep -v -f file1 file2
ध्यान दें कि अगर फ़ाइल 2 में डुप्ली है केट लाइन जो फ़ाइल 1, fgrep
में मौजूद नहीं हैं, प्रत्येक डुप्लिकेट लाइनों को आउटपुट करेंगे।यह भी ध्यान रखें कि एकल (काफी बड़े) डेटासेट के लिए एक लैपटॉप पर मेरे पूरी तरह से गैर-वैज्ञानिक परीक्षण समाधान 1 (comm
का उपयोग करके) समाधान 2 से लगभग 5 गुना तेज (fgrep
का उपयोग करके) दिखाते हैं।
मैं जोड़ूंगा कि यह केवल तभी काम करता है जब दोनों फाइलें क्रमबद्ध हों। (मुझे पता है कि ओपी ने फाइलों को सॉर्ट किया है, लेकिन कई लोगों ने मुझे शामिल किया है, प्रश्न शीर्षक पढ़ा है और फिर उत्तर पर कूदें) – user247866
@ user247866: सौभाग्य से कॉम आपको यह बताने के लिए बहुत दयालु है कि वे सॉर्ट नहीं किए गए हैं :) – marlar