ভিন্ন যেখানে লাইনগুলি বেশিরভাগই একই তবে বিন্যাসের বাইরে?


23

আমি মোড_উইরাইট নিয়মের দুটি সেটকে পৃথক করতে চাই। লাইনের সেটটি প্রায় 90% অভিন্ন, তবে ক্রমটি এত আলাদা যে মূলত তারা সম্পূর্ণ আলাদা বলে says

লাইন সংখ্যা নির্বিশেষে কোন ফাইলগুলি দুটি ফাইলের মধ্যে সত্যিই আলাদা তা আমি কীভাবে দেখতে পারি?


3
উভয় sortমুষ্টি মাধ্যমে পাস ।
শন জে গফ 21

@ শ্যাশন আমি দুটি ওয়ান-অফ ফাইল তৈরি করে (এবং তারপরে মোছার পরে) এটি কি করতে পারি?
ব্যবহারকারী 394

উত্তর:


36

sortফাইলগুলি একই ক্রমে পাওয়ার জন্য ব্যবহার করা যেতে পারে তাই diffতাদের তুলনা করতে এবং পার্থক্যগুলি সনাক্ত করতে পারে। আপনার যদি প্রক্রিয়াটির বিকল্প থাকে তবে আপনি এটি ব্যবহার করতে পারেন এবং নতুন সাজানো ফাইল তৈরি করা এড়াতে পারেন।

diff <(sort file1) <(sort file2)

8

এটির জন্য একটি স্ক্রিপ্ট তৈরি করে যা রেখার ক্রমটি অক্ষত রাখে । এখানে গুরুত্বপূর্ণ লাইনগুলির একটি টীকা দেওয়া সংস্করণ:

# Strip all context lines
diff_lines="$(grep '^[><+-] ' | sed 's/^+/>/;s/^-/</')" || exit 0

# For each line, count the number of lines with the same content in the
# "left" and "right" diffs. If the numbers are not the same, then the line
# was either not moved or it's not obvious where it was moved, so the line
# is printed.
while IFS= read -r line
do
    contents="${line:2}"
    count_removes="$(grep -cFxe "< $contents" <<< "$diff_lines" || true)"
    count_adds="$(grep -cFxe "> $contents" <<< "$diff_lines" || true)"
    if [[ "$count_removes" -eq "$count_adds" ]]
    then
        # Line has been moved; skip it.
        continue
    fi

    echo "$line"
done <<< "$diff_lines"

if [ "${line+defined}" = defined ]
then
    printf "$line"
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.