fark nerede çizgiler çoğunlukla aynı ama sıra dışı?


23

İki mod_rewrite kuralını zorlamak istiyorum. Satır kümesi yaklaşık% 90 oranında aynıdır, ancak sıralama o kadar farklıdır ki, fark, temelde tamamen farklı olduklarını söyler.

Satır numaralarına bakılmaksızın, iki dosya arasında hangi satırların gerçekten farklı olduğunu nasıl görebilirim?


3
İkisini de sortyumruktan geçir.
Shawn J. Goff

@Shawn Bunu iki bir kerelik dosya oluşturmadan (ve daha sonra silmeden) yapabilir miyim?
user394

Yanıtlar:


36

sortDosyaları aynı düzende almak için kullanılabilir, böylece diffbunları karşılaştırabilir ve farkları belirleyebilirsiniz. İşlem değiştirme işleminiz varsa, bunu kullanabilir ve yeni sıralanmış dosyalar oluşturmaktan kaçının.

diff <(sort file1) <(sort file2)

8

Bunun için çizgi dizisini sağlam tutan bir betik hazırladım . İşte önemli satırların açıklamalı bir versiyonu:

# 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.