দুটি পাঠ্য ফাইলের সাধারণ লাইনগুলি (সাদৃশ্যগুলি) আউটপুট করবেন (বিপরীতে)?


21

দুটি ফাইলের মধ্যে পরিবর্তনগুলি প্রদর্শন করার জন্য ডিফ একটি দুর্দান্ত সরঞ্জাম। তবে কীভাবে দুটি পাঠ্য ফাইলের সাদৃশ্য প্রদর্শন করবেন (পার্থক্য উপেক্ষা করার সময়)?

উদাহরণস্বরূপ ইনপুট:

a:
Foo Bar
X
Hello
World
42

b:
Foo Baz
Hello
World
23

সিউডো আউটপুট (এরকম কিছু):

@@ 2,3
=Hello World

উভয় ফাইলকে বাছাই করা এবং কম ব্যবহার করা যথেষ্ট নয়, কারণ সেই ক্ষেত্রে লাইন তথ্য হারিয়ে যায়।

উত্তর:


24

আপনি ভিন্নতা চান না, এমনকি কীভাবে ডিফ ব্যবহার করবেন? এটা চেষ্টা কর:

diff --unchanged-group-format='@@ %dn,%df 
  %<' --old-group-format='' --new-group-format='' \
  --changed-group-format='' a.txt b.txt

আপনার নমুনা ডেটা দিয়ে আমি যা এখানে পেয়েছি তা এখানে:

$ cat a.txt 
Foo Bar
X
Hello
World
42
$ cat b.txt 
Foo Baz
Hello
World
23
$ diff --unchanged-group-format='@@ %dn,%df
%<' --old-group-format='' --new-group-format='' \
  --changed-group-format='' a.txt b.txt
@@ 2,3
Hello
World

2
আপনি এর মতো আক্ষরিক নতুন লাইনে এম্বেড এড়াতে পারবেন:...%df'$'\n''%<'...
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1
আপনি এটি এর মতো করেও করতে পারেন: ... --unchanged-group-format="@@ %dn,%df%c'\012'%<" ...(ডাবল উদ্ধৃতিগুলি নোট করুন))
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

দুর্দান্ত জিনিস! আমি এই বিকল্পগুলি জানতাম না, কারণ আমি সবেমাত্র
ডিফার

আমি diff --version diff (GNU diffutils) 2.8.1 ব্যবহার করছি এবং আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: ডিফ: বিবাদী আউটপুট শৈলীর বিকল্পগুলি পৃথক: আরও তথ্যের জন্য 'ডিফ - হেল্প' চেষ্টা করুন Try
সুজয়

আমি "ত্রুটি: ডিফ: বিবাদী আউটপুট শৈলীর বিকল্পগুলি ডিফ" পাচ্ছিলাম কারণ আমার একটি পৃথক উপকরণ সংজ্ঞায়িত হয়েছিল। which diffএটি আপনার সমস্যা কিনা তা দেখতে ব্যবহার করুন ।
justinjhendrick

14
grep -Fxf file1 file2

-Fমানে প্লেইন স্ট্রিংগুলি মিলবে (রিজেক্সপস নয়), -xকেবলমাত্র পুরো লাইন মিলগুলি,-f মানে তার আর্গুমেন্ট হিসাবে ফাইল থেকে 'নিদর্শন' (অর্থাত লাইন) নিন


3
নয় -fএবং -Fবিনিময় ?. কমপক্ষে আমার grepসংস্করণটি এর মতো। আমার file2পক্ষে -fযুক্তির মতো ইনপুট সরবরাহ করতে হবে cat file1 | grep -Fxf file2, এবং তারপরে কাজ করে।
বীরেই

এটা আমার জন্য কাজ করা হয় না।
চামিন্দা বান্দারা

7

commব্যবহার করা যেতে পারে. man commসমস্ত বিকল্পের জন্য তবে আপনি ব্যবহার করতে চাইবেনcomm -12 ... উভয় ইনপুটগুলিতে বিদ্যমান লাইনগুলি দেখানোর করতে ।

লোকেরা যেমন নির্দেশ করেছে, আপনাকে sortপ্রথমে আপনার ইনপুটটি পাস করতে হবে ।


1
এইচএম, এটি উভয় ফাইলে একই লাইন নম্বরে থাকা সাধারণ লাইনের জন্য কাজ করে।
ম্যাক্সলেপজিগ

2
কম মনে হয় কেবল বাছাই করা ফাইলের জন্য এবং ওপির ব্যবহারের জন্য সেই দরকারী আউটপুট দেয় না। তাঁর উদাহরণ: $ Comm -12 AB হ্যালো ওয়ার্ল্ড Comm: ফাইল 1 সাজানো ক্রম Comm নেই: ফাইল 2 সাজানো ক্রম নয়
মার্সেল Stimberg

@ ম্যাক্সচলেপজিগ: আপনার ফাইলগুলি কম এ যাওয়ার আগে তাদের বাছাই করা উচিত।
হেমন্ত

2
বাছাইয়ের মাধ্যমে আপনি সাধারণ লাইনের অবস্থানের বিষয়ে সমস্ত তথ্য থেকে মুক্তি পান। ফাইলগুলির সাথে আলাদা করে তুলনা করার আগে আপনি বাছাই করবেন না।
মার্সেল স্টিমবার্গ

7

আমি মনে করি না যে কোনও একক আদেশ রয়েছে যা আপনি এটি করতে চান তা করে। যদিও আপনি এর diffসাথে আউটপুট একত্রিত করার চেষ্টা করতে পারেন grep। যদি আপনার পাঠ্য ফাইল অক্ষরের কেউ ধারণ করে |, <, >নিম্নলিখিত আপনি কিছুটা দরকারী আউটপুট দেয়:

$ diff --side-by-side a b | grep -n -v "[|<>]"
3:Hello                             Hello
4:World                             World

এটি চেষ্টা করুন:diff --width=155 --left-column --side-by-side a b | grep -n -v '|' | sed 's/ *($//'
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

এটি আরও ভাল দেখায় - তবে উভয় ফাইলে যুক্ত লাইনগুলি থেকে মুক্তি পেতে আপনাকে << এবং গ্রেপগুলিতে অন্তর্ভুক্ত করতে হবে।
মার্সেল স্টিমবার্গ

2

ডিক গ্রুন এই জাতীয় জিনিসটির জন্য একটি পরিবার সরঞ্জাম লিখেছিলেন:

http://dickgrune.com/Programs/similarity_tester/

বিভিন্ন সংস্করণ রয়েছে যা বিভিন্ন ভাষার বাক্য গঠনকে বিশ্লেষণ করে, যাতে নাম পরিবর্তিত ভেরিয়েবলের মতো জিনিসগুলি অপরিবর্তিত হিসাবে দেখা যায়।

এটি similarity-testerডেবিয়ান এবং উবুন্টুর মতোই প্যাকেজযুক্ত ।

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