2012-10-13 17 views
5

मान लें कि मेरे पास दो टेक्स्ट फ़ाइलें हैं जिन्हें मुझे डेटा निकालने की आवश्यकता है। दो फ़ाइलों का पाठ इस प्रकार है:बीएएसएच का उपयोग कर एक ही सटीक पाठ के लिए दो पाठ फ़ाइलों की तुलना कैसे करें?

फ़ाइल 1:

1name - [email protected] 
2Name - [email protected] 
3Name - [email protected] 
4Name - [email protected] 

फ़ाइल 2:

email.com 
email.com 
email.com 
anotherwebsite.com 

फ़ाइल 2 डोमेन नामों की फ़ाइल 1 की सूची, से निकाला जाता है ईमेल पते। ये किसी भी माध्यम से समान डोमेन नाम नहीं हैं, और काफी यादृच्छिक हैं।

मैं फ़ाइल नाम से फ़ाइल 2 से मेल खाने वाले डोमेन नामों के परिणाम कैसे प्राप्त कर सकता हूं?

अग्रिम धन्यवाद!

उत्तर

8

कि आदेश कोई फर्क नहीं पड़ता मानते हुए,

grep -F -f FILE2 FILE1 

चाल करना चाहिए।

+0

आप जीवन-बचतकर्ता हैं। धन्यवाद! क्या कोई तरीका है कि हम उसे नाम - ईमेल पते जैसे प्रारूप में वापस प्रदर्शित करने के लिए प्राप्त कर सकते हैं? – user1742682

+0

यह FILE1 से पूरी लाइनों को प्रिंट करेगा जिसमें FILE2 में किसी भी स्ट्रिंग शामिल है। क्या वह प्रारूप नहीं है जिसे आप चाहते हैं? – zwol

+0

मेरी गलती! यह ठीक काम करता है! मेरे स्वरूपण के साथ समस्या। धन्यवाद! : डी – user1742682

0

तो मुझे मिल गया: (grep करने के लिए -F विकल्प सिर्फ मतलब यह नहीं है "इस तय स्ट्रिंग से मेल," इसका मतलब है इसका कारण यह है एक अल्पज्ञात तथ्य की काम करता है "इन न्यू लाइन से अलग किए तय तार के किसी भी मेल खाते हैं।") आप सही हैं, तो आप फ़ाइल में उल्लेख मेजबान के साथ सभी पतों के लिए फ़िल्टर करना चाहते हैं 2.

आप कर सकते थे तो बस @<line> के लिए File 2 और ग्रेप से अधिक पाश, एक नई फ़ाइल या कुछ इसी तरह के परिणाम जमा।

उदाहरण:

cat file2 | sort -u | while read host; do grep "@$host" file1; done > filtered 
+0

सही! लेकिन नाम - ईमेल @ ddress प्रारूप फ़ाइल 1 में उपयोग किया गया है। यह व्यर्थ लग सकता है, लेकिन यह निश्चित रूप से मेरे लिए एक बिंदु है! – user1742682

+0

यह फ़ाइल 2 में प्रत्येक पंक्ति के लिए सभी फ़ाइल 1 पढ़ेगा। यह काम पूरा हो सकता है, लेकिन यह बहुत अक्षम है। – jordanm

+0

@jordanm सहमत हैं। मैं सब 'grep -f -F' समाधान के लिए हूँ। मैंने वैचारिक होने की कोशिश की। – nemo

2

नुस्खा:

join <(sed 's/^.*@//' file1|sort -u) <(sort -u file2) 

यह उत्पादन file1 में सभी डोमेन नाम के चौराहे और करें 2

1

इस के लिए सामान्य समाधान की सूची के लिए BashFAQ/036 देखेंगे समस्या का प्रकार

1

VimDIFF कमांड का उपयोग करें, यह अंतर की एक अच्छी प्रस्तुति देता है

+1

मैंने इसे 'grep -F -f FILE2 FILE1' से बेहतर पाया – Totalys