2011-01-03 4 views
0

Как я могу дифф 2 файлов так, чтобы:UNIX DIFF специальные опции

  1. Я не забочусь о каком-то белом пространстве (опция -b)
  2. Я не заботиться о положении содержания. (??)

То, что я подразумеваю под 2, является следующим: файл с on-line1 и b на строке2 равен другому файлу с b в строке 1 и строке on2.

Пожалуйста, дайте мне знать, если вопрос еще не ясен.

спасибо.

ответ

1

Сначала откорректируйте два файла, затем разделите их. Невозможно убедить diff, что строки a и b в любом случае взаимозаменяемы. Заказ чрезвычайно важен для разграничения.

Edit для комментариев -

инструменты, как дифф не понимают, какие высокие семантику за пределы просто упорядоченных строк. Вы можете попробовать написать инструмент, который преобразует ваши файлы в те концепции более высокого уровня, по одному в каждой строке, которые, возможно, затем могут обрабатывать diff (против написания пользовательского diff, что является видом боли). Поскольку вы не можете отсортировать весь файл, возможно, вы отсортируете те небольшие разделы, где «порядок не имеет значения», таким образом, они не будут иметь значения и для разграничения.

Окончательный файл необязательно должен быть надлежащим файловым форматом (то есть совместимым с исходным синтаксисом), а достаточно просто, чтобы передать, чтобы использовать различия, которые вы ищете, сохраняя при этом семантику, используя инструмент с полки, например, diff.

Пример:

Файл 1:

block thing { 
    a 
    b 
} 

block thing 2 { 
    c 
    d 
} 

Файл 2:

block thing { 
    b 
    c 
    a 
} 

block thing 3 { 
    f 
    e 
} 

"сортируются" Файл 1:

block thing { 
    a 
    b 
} 

block thing 2 { 
    c 
    d 
} 

"сортируются" Файл 2:

block thing { 
    a 
    b 
    c 
} 

block thing 3 { 
    e 
    f 
} 

В конце концов, в идеале, вы обнаружите, что блок 3 является «новым», а также «с» в блоке 1.

+0

Спасибо Уилла, что подтверждает то, что я понял. Я не могу просто сортировать его (что сложно объяснить, почему). Что-нибудь другое, кроме diff, которое я могу использовать? Я имею в виду, возможно ли это? – hari

+0

Почему вы не можете сортировать данные? Вы можете использовать Perl для разделения отдельных файлов на отдельные структуры, а затем выполнять сравнения - возможно, путем сортировки, даже если это фактически не необходимо, за исключением, возможно, из соображений производительности. –

+0

Если вы начинаете с сортированного ввода, 'comm' будет быстрее, чем' diff'. – ephemient

Смежные вопросы