सम्मिलन या विलोपन के बिना, दो फ़ाइलों की सख्ती से लाइन-दर-पंक्ति तुलना करें


14

मेरे पास दो फाइलें हैं जिनमें अनिवार्य रूप से एक हेक्स प्रारूप में एक मेमोरी डंप है। फिलहाल मैं यह देखने के लिए अलग का उपयोग करता हूं कि क्या फाइलें अलग हैं और कहां अंतर हैं। हालांकि, अंतर के सटीक स्थान (यानी मेमोरी एड्रेस) को निर्धारित करने की कोशिश करते समय यह भ्रामक हो सकता है। दो फाइलों को अगल-बगल दिखाने वाले निम्न उदाहरण पर विचार करें।

file1:       file2:

0001    |    0001
ABCD    |    FFFF
1234    |    ABCD
FFFF    |    1234

अब diff -uएक प्रविष्टि और एक विलोपन दिखाएगा, हालांकि दो फ़ाइलों के बीच 3 लाइनें (मेमोरी स्थान) बदल गए हैं:

 0001
+FFFF
 ABCD
 1234
-FFFF

क्या दो फ़ाइलों की तुलना करने का एक आसान तरीका है कि प्रत्येक पंक्ति की तुलना दूसरी फ़ाइल में एक ही पंक्ति (लाइन क्रमांकन के संदर्भ में) के साथ की जाती है? तो इस उदाहरण में यह रिपोर्ट करना चाहिए कि पिछले 3 लाइनों, बदल दिया है से बदली हुई लाइनों के साथ-साथ file1और file2। आउटपुट को अलग-अलग स्टाइल का नहीं होना चाहिए, लेकिन अगर यह रंगीन हो सकता है, तो यह अच्छा होगा (फिलहाल मैं diff -uआउटपुट का उपयोग करता हूं sedताकि इसे आसानी से अनुकूलित किया जा सके)।

जवाबों:


19

यह एक दृष्टिकोण हो सकता है:

diff <(nl file1) <(nl file2)

nlसंख्या के साथ रेखाएं जो diffरेखा से रेखा को पहचानती हैं।


3
यह अच्छा है, मैं nl कार्यक्रम नहीं जानता था। वे यूनिक्स उपकरण वास्तव में उपयोगी हैं, लेकिन उनमें से बहुत सारे हैं।
फ्रिट्ज़

1
मैंने बस यही कोशिश की, और दुर्भाग्यवश मुझे जो मिला वह है: पहली फ़ाइल की प्रत्येक पंक्ति, उसके बाद दूसरी फ़ाइल की प्रत्येक पंक्ति ... फ़ाइल 1 से पंक्ति 1 के बजाय, फ़ाइल 2 से पंक्ति 1, उसके बाद पंक्ति 2 फ़ाइल एक से, उसके बाद लाइन 2 से फ़ाइल 2 ...
माइकल हेवसन

@MichaelHewson ऐसा लगता है कि आपकी दो फ़ाइलों में कोई रेखा नहीं है। उस मामले में, यह सिर्फ यह है कि कैसे diffकाम करता है। आप गुई कार्यक्रम की कोशिश कर सकते हैं meldजो दो फाइलों को एक साथ दिखाता है। जैसेmeld <(nl file1) <(nl file2)
फ्रिट्ज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.