ডিআইএফএফ-এ কেবল একটি ফাইল থেকে লাইন তালিকাবদ্ধ করা


34

আমি (জিএনইউ) ডিআইএফএফকে কেবল একটি ফাইলে আলাদা লাইনগুলি মুদ্রণ করতে চাই। তাই দেওয়া হয়েছে

    ==> diffa.txt <==
    line1
    line2 - in a only
    line3
    line4 changed
    line5

    ==> diffb.txt <==
    line1
    line3
    line4 changed in b
    line5
    line6 in b only

আমি diff --someoption diffa.txt diffb.txtউত্পাদন করতে চাই

    line2 - in a only

    line4 changed

নিম্নলিখিতটিকে দেখে মনে হচ্ছে এটি সহায়ক হওয়া উচিত তবে এটি কিছুটা রহস্যজনক:

   --GTYPE-group-format=GFMT
          Similar, but format GTYPE input groups with GFMT.

   --line-format=LFMT
          Similar, but format all input lines with LFMT.

   --LTYPE-line-format=LFMT
          Similar, but format LTYPE input lines with LFMT.

   LTYPE is `old', `new', or `unchanged'.
          GTYPE is LTYPE or `changed'.

          GFMT may contain:

   %<     lines from FILE1

   %>     lines from FILE2

ম্যান পেজটি অবশ্যই এই পতাকাগুলিতে কিছুটা ছড়িয়ে পড়েছে! ভাল প্রশ্ন.
— কুইকশিফ্টিন

1
আমি উল্লেখ করতে চাই যে 'তথ্য ডিফ' সম্পূর্ণ উদাহরণ দেবে, তথ্যে তথ্যের প্রচুর পরিমাণ আছে।
— বড়উদি সাফওয়েন

উত্তর:


42

diffএকা এটি করতে পারে তা নিশ্চিত নয় তবে আপনি সর্বদা আপনাকে সহায়তা করার জন্য অন্যান্য জিএনইউ ইউটিলিটিগুলির শক্তি ব্যবহার করতে পারেন।

diff -u diffa.txt diffb.txt | grep '^-[^-]' | sed 's/^-//'

এটি পৃথক করে, তারপরে কেবল '-' দিয়ে শুরু হওয়া লাইনগুলি নির্বাচন করে - সেগুলি পরিবর্তিত হয় এবং ডিফাফা টেক্সট ফাইল থেকে মান থাকে, তবে sedকেবল সেই '-' চিহ্নগুলি সরিয়ে ফেলুন।

সম্পাদনা: কিছু পরীক্ষা-নিরীক্ষার পরেdiff মনে হচ্ছে নীচের কমান্ডটি যা চায় তা উত্পাদন করে:

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

একের জন্য পাইপের পদ্ধতিটি ভাল। আমি s / ^ - // "if পার্ল -ne" মুদ্রণ পছন্দ করি তবে এটি স্বাদ। আমি মনে করি এখন দেখছি --changed-group-format='%<'আমার জন্য কী করছে ....
— justintime

ধন্যবাদ। : দুটি কম্পিউটারের মধ্যে আমার সমস্ত প্যাকেজ তালিকাভুক্ত করার জন্য ডিআই-র এর মতো কিছু দরকার ছিল এবং আমি এসডিফ ব্যবহার করেছি তবে এটি কিছুটা ভাল দেখাচ্ছে।
— রব

12

আরও সহজ পদ্ধতি ব্যবহার করা হয় comm লিনাক্স ইউটিলিটি (এটির জন্য ইনপুট জন্য বাছাই করা ফাইল দরকার)। এটি স্ট্যান্ডার্ড আউটপুট লিখেছেন:

  • লাইফগুলি যা ডিফাফা টেক্সটের জন্য অনন্য

  • লাইফগুলি যা diffb.txt এর জন্য অনন্য

  • লাইন যে সাধারণ

এবং সেই অনুসারে আপনি তাদের প্রত্যেককে 1,2 বা 3 পরামিতি দমন করতে পারেন। সুতরাং আপনার ক্ষেত্রে এটির মতো দেখাবে:

comm -23 diffa.txt diffb.txt

এটি লাইফগুলিকে দমন করে যা ডিফফ.এক্সটিএসটির জন্য অনন্য, লাইনগুলি সাধারণ এবং লাইনগুলি প্রিন্ট করে যা কেবল ডিফাফা টেক্সটের জন্য অনন্য are

উত্স থেকে: https://www.tutorialspPoint.com/unix_commands/comm.htm


আমি এটি অনেক সহজ খুঁজে পেয়েছি diffযা আমার প্রত্যাশা অনুযায়ী হয় না isn't এবং আমি বিশ্বাস করি এটি বিএসডি (যেমন ম্যাক ওএস এক্স) পাশাপাশি উবুন্টু উভয়ই প্রাক-ইনস্টলড তাই কোনও প্যাকেজ পরিচালকের দুঃস্বপ্ন।
— শ্রীধর সারনোবাত

3

আমি উল্লেখ করতে চাই যে commসাজানো ইনপুট ফাইলগুলি প্রত্যাশা করে এবং এর চেয়ে বিভিন্ন ফলাফলের প্রতিবেদন করে diff।

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

সর্বজনীন। কুদোস টু @ ভাভা

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