रिपोर्ट की दो फाइलें अलग-अलग हैं, हालांकि वे समान हैं!


31

मेरे पास दो फाइलें हैं जो मेरे समान दिखती हैं (अनुगामी व्हाट्सएप और न्यूलाइन्स सहित) लेकिन फिर भी कहते हैं कि वे अलग हैं। यहां तक ​​कि जब मैं एक diff -yतरफ से तुलना करता हूं तो लाइनें बिल्कुल एक जैसी दिखती हैं। अंतर से आउटपुट पूरे 2 फाइलें हैं।

किसी भी विचार यह क्या कारण है?


3
अनपेक्षित वर्णों की तुलना करने का प्रयास करें। उन्हें देखने का सबसे सरल तरीका है sed -n l filename। यदि यह मदद नहीं करेगा, तो diffयहां एक डेटा उदाहरण और आउटपुट जोड़ें ।
भीड़

1
आह हाँ, धन्यवाद, एक फ़ाइल में लाइनें $ के साथ समाप्त हो रही हैं और दूसरे में \ r $ के साथ समाप्त हो रही हैं
मिन्हानी

1
दोनों फ़ाइलों पर dos2unix का उपयोग करने के लिए एक त्वरित सुधार है (या जिस पर आपको विंडोज मशीन से संदेह है)।
कीम्ब्राड

मौजूदा उत्तरों के पूरक के रूप में: fileकमांड आपको फ़ाइल सामग्री के बारे में संकेत देगा, जिसमें ASCII text, with CRLF line terminatorsबनाम जैसी चीजें शामिल हैं ASCII text
स्टीफन गौरिचोन

जवाबों:


29

अजीब .. क्या आप कोशिश कर सकते हैं cmp? आप ' -b' विकल्प का भी उपयोग करना चाह सकते हैं ।

सीएमपी मैन पेज - दो फाइलों की बाइट की तुलना करें।

यह यूनिक्स / लिनक्स के बारे में अच्छी चीजों में से एक है .. इतने सारे उपकरण :)


2
उसके लिए धन्यवाद! मुझे मिल गया: बाइट 19, लाइन 1 15 ^ एम 12 ^ जे का क्या मतलब है?
मिन्हानी


2
की कोशिश की-बी के साथ और यह मेरे लिए काम कर रहा है। आदमी पेज का कहना है -bके लिए है ignore changes in the amount of white space
rahul.deshmukhpatil

17

अंतर DOS बनाम UNIX लाइन अंत या कुछ इसी तरह के कारण हो सकता है?

अगर आप hexdumpउन्हें यह अंतर अधिक स्पष्ट रूप से दिखा सकता है, जैसे:

hexdump -C file1 > file1.hex
hexdump -C file2 > file2.hex
diff file1.hex file2.hex

खैर, दोनों हेक्स अलग हैं। हर बार एक 0d 0a एक फ़ाइल में एक दूसरे के पास बस एक 0a है
MinaHany

3
एक में, आपके पास डॉस लाइन एंडिंग (CRLF) और दूसरे में, UNIX लाइन एंडिंग (LF) है। इसलिए वे अलग-अलग दिखते हैं लेकिन तब नहीं जब आप उन्हें नेत्रहीन देखते हैं। को देखो en.wikipedia.org/wiki/Newline#Conversion_utilities
MRB

समझ गया! बहुत बहुत धन्यवाद। सीएमपी का उपयोग करने के लेवोन के सुझाव में अंतर अधिक स्पष्ट रूप से दिखाई देता है हालांकि :)
मिन्हानी

17

प्रयत्न:

diff file1 file2 | cat -t

-tविकल्प का कारण होगा catस्पष्ट रूप से कोई विशेष वर्ण को दिखाने के लिए - जैसे। ^Mसीआर के लिए, ^Iटैब के लिए।

मैन पेज से (OS X):

 -t      Display non-printing characters (see the -v option), and display tab characters as `^I'.

 -v      Display non-printing characters so they are visible.
         Control characters print as `^X' for control-X; the delete character
         (octal 0177) prints as `^?'.  Non-ASCII characters
         (with the high bit set) are printed as `M-' (for meta) followed by the
         character for the low 7 bits.

4

मेरा पहला अनुमान, जो पुष्टि करता है, यह है कि फाइलें अलग-अलग लाइन अंत का उपयोग करती हैं। यह व्हाट्सएप में कुछ अन्य अंतर हो सकता है, जैसे कि व्हाट्सएप के पीछे की उपस्थिति (लेकिन आप आमतौर पर कई लाइनों पर नहीं मिलेगा) या अलग इंडेंटेशन (टैब बनाम स्पेस)। एक कमांड का उपयोग करें जो व्हाट्सएप को प्रिंट करता है और पात्रों को एक दृश्य रूप में नियंत्रित करता है, जैसे कि

diff <(cat -A file1) <(cat -A file2)
diff <(sed -n l file1) <(sed -n l file2)

आप पुष्टि कर सकते हैं कि मतभेदों को पहले उन्हें सामान्य करके लाइन एंडिंग के साथ करना होगा। आपकी dos2unixउपयोगिता हो सकती है ; यदि नहीं, तो अतिरिक्त CR (^ M, \ r, \ 015) वर्ण को स्पष्ट रूप से हटा दें:

diff <(tr -d '\r' <file1) <(tr -d '\r' <file2)

या, यदि file1डॉस अंत के साथ एक है

 tr -d '\r' <file1 | diff - file2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.