6

Например, у меня есть текстовый файл, каждая строка является длинной строкой. Я хочу исключить 2 "сегмента" этой строки, скажем, столбцы 1-7 и 20-22. Таким образом, нижние 2 строки ниже будут совпадать:

123456789012345678901234567890 
------------------------------
xxxxxxxAAAAAAAAAAAAxxxBBBBBBBB
yyyyyyyAAAAAAAAAAAAyyyBBBBBBBB

Я знаю, что в WinMerge есть плагин IgnoreColumns, но я никогда не работал. В этом примере я бы переименовал его в IgnoreColumns_1-7, 20-22.dll, выбрал его в меню плагинов и выбрал «Pre-Differ». но это никогда не работало.

Я собираюсь сравнивать огромные файлы, которые я не хочу изменять. Я не против потокового редактирования их по сравнению с sed или чем-то в этом роде, но я бы предпочел не изменять реальные файлы. Я еще не решил использовать sed для diff просто потому, что надеялся на более наглядное представление данных.

4 ответа4

4

Следующее работает на Linux и на Cygwin.

vimdiff <(cut -c8-19,23- file1) <(cut -c8-19,23- file2)

По какой-то причине в Cygwin Vim сообщает, что каждый файл изменился с момента начала редактирования, и спрашивает:«[O] K, (L)oad File:». Просто введите O каждый раз.

Конечно, вы не видите пропущенные столбцы, но это визуальное, параллельное сравнение.

3

Если вы все еще хотите, чтобы плагин WinMerge "IgnoreColumns" работал ... похоже, вы близки. Две заметки:

  1. Например, скопируйте MergePlugins в IgnoreColumns_1-7_20-22.dll в подпапке IgnoreColumns.dll IgnoreColumns_1-7_20-22.dll (без пробелов и используйте подчеркивание вместо запятой).

  2. Полностью выйдите из WinMerge и перезапустите его после размещения этой DLL. ("Обновить плагины" обновит выпадающее меню « Plug-ins / List , но не обновит функциональность.)

Примечание: я рекомендую «поддерживаемую, но неофициальную» версию WinMerge - 2.13.20.12, - которая включает 3-стороннее сравнение. Перейдите к неофициальным сборкам WinMerge, и внизу вы увидите «версию с поддержкой 3-way diff».

1

Как и в ответе Diogo_Rocha, вы можете предварительно изменить файл, чтобы удалить столбцы, которые вы не хотите тестировать, а затем запустить diff. Но только с командной строкой.

Так что для вашего примера, удалив «столбцы» 1-7 и 20-22 вы можете.

sed 's/.\{7\}\(.\{12\}\).\{3\}\(.*\)/\1\2/' test.txt > test2.txt
diff -u test2.txt whatnot.txt

Изменить: откровенное воровство лучшего ответа Гариджона.

diff -u <(cut -c8-19,23- test1.txt) <(cut -c8-19,23- test2.txt) | less
0

Если бы я мог понять ваши сомнения, вы пытаетесь исключить или выбрать определенные столбцы из текстового файла. Если это правда, вы можете сделать это с помощью приложения textpad . Установите его и откройте текстовый файл, затем нажмите клавишу "Alt" в то же время, когда вы выбираете определенные столбцы из своего текста. Выбрав эти столбцы, вы можете копировать, вырезать или удалять все, что вам нужно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .