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


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.