ডিফ রিপোর্ট দুটি ফাইল পৃথক, যদিও সেগুলি একই!


31

আমার কাছে দুটি ফাইল রয়েছে যা আমার কাছে অভিন্ন বলে মনে হচ্ছে (হ্যালো স্পেস এবং নিউলাইনগুলি অনুসরণ করা সহ) তবে পৃথক এখনও বলে যে তারা পৃথক। এমনকি যখন আমি diff -yপাশাপাশি তুলনা করি লাইনগুলি দেখতে একই রকম। ডিফ থেকে আউটপুট পুরো 2 টি ফাইল files

কোন ধারণা কি কারণ?


3
ছাপিয়ে যাওয়া অক্ষরগুলি তুলনা করার চেষ্টা করুন। এগুলি দেখার সহজ উপায় হ'ল sed -n l filename। এটি যদি সহায়তা না করে তবে একটি ডেটা উদাহরণ এবং diffআউটপুট যুক্ত করুন।
ছুটে

1
আহ্ হ্যাঁ আপনাকে ধন্যবাদ, একটি ফাইলের রেখাগুলি $ এবং অন্য একটিতে $ r with দিয়ে শেষ হচ্ছে
মিনা হ্যানি

1
একটি দ্রুত ফিক্স হ'ল উভয় ফাইলের উপর ডস 2 ইউনিক্স ব্যবহার করা (বা যা আপনি উইন্ডোজ মেশিনের বলে মনে করেন)।
চেম্ব্রাড

বিদ্যমান উত্তর একটি সম্পূরক হিসাবে: fileকমান্ড ফাইল বিষয়বস্তু সম্পর্কে আপনি প্রজ্ঞান করবে ভালো জিনিস সহ ASCII text, with CRLF line terminatorsবনাম ASCII text
স্টাফেন গ্যারিচন

উত্তর:


29

অদ্ভুত .. আপনি চেষ্টা করতে পারেন cmp? আপনি ' -b' বিকল্পটিও ব্যবহার করতে চাইতে পারেন ।

সিএমপি ম্যান পেজ - বাইট বাই দুটি ফাইলের সাথে তুলনা করুন।

এটি ইউনিক্স / লিনাক্স সম্পর্কে একটি দুর্দান্ত জিনিস .. এতগুলি সরঞ্জাম :)


2
তার জন্য ধন্যবাদ! আমি পেয়েছি: বাইট 19, লাইন 1 15 ^ M 12 ^ J এর অর্থ কী?
মিনাহানি


2
পার্থক্যটি চেষ্টা করে দেখে মনে হচ্ছে এটি আমার জন্য কাজ করছে। মানুষ পৃষ্ঠাটি জানাচ্ছে -bজন্য ignore changes in the amount of white space
rahul.deshmukhpatil

17

ডস বনাম ইউনিক্স লাইন সমাপ্তি বা এর অনুরূপ কি কারণে পার্থক্য দেখা দিতে পারে?

আপনি যদি hexdumpতাদের? এটি আরও স্পষ্টতই পার্থক্য দেখাতে পারে, যেমন:

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

ঠিক আছে, দুটি hexes পৃথক। প্রতিবার একটি ফাইলের মধ্যে 0 ডি 0 এ আছে
অন্যটির

3
একটিতে আপনার ডস লাইন এন্ডিংস (সিআরএলএফ) এবং অন্যটিতে ইউনিক্স লাইন এন্ডিংস (এলএফ) রয়েছে। এ কারণেই এগুলিকে আলাদা করে দেখায় তবে আপনি যখন তাদের দৃষ্টিভঙ্গি করে দেখেন তখন তা নয়। এ en.wikipedia.org/wiki/Newline#Conversion_utilities
mrb

বুঝেছি! অনেক ধন্যবাদ.
লেভিনের সিএমপি

17

চেষ্টা করুন:

diff file1 file2 | cat -t

-tবিকল্প কারণ হবে catপরিষ্কারভাবে কোন বিশেষ বৈশিষ্ট্য দেখানোর জন্য - যেমন। ^Mসিআর ^Iজন্য, ট্যাব জন্য।

ম্যান পৃষ্ঠা থেকে (ওএস এক্স):

 -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ইউটিলিটি থাকতে পারে ; যদি তা না হয় তবে অতিরিক্ত সিআর (^ এম, \ আর, \ 015) অক্ষরটি পরিষ্কারভাবে সরান:

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

বা, যদি file1ডস শেষ হয় তবে

 tr -d '\r' <file1 | diff - file2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.