Як зробити різницю (розбіжність) рядків у Linux?


0

У мене є два текстові файли, де порядок рядків не має значення. Я хочу з’ясувати рядки, які в одному файлі відрізняються від іншого. Використовуючи diff у linux, знаходить різницю, але також враховує зміну рядків того ж тексту.

Іншими словами, як я можу зробити різницю між нечутливою лінією?

Відповіді:


5

Якщо ваші файли не надто великі, ви можете sortїх до diffтого, як ing.

Отже, щось подібне спрацювало б:

sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted

Або, як ви з’ясували в коментарях, ви також можете зробити це в один рядок,

diff <(sort file1) <(sort file2)

2

Подібно до diffпараметрів, ви можете використовувати commкоманду з підстановками процесів і sort( commвимагає, щоб файли, над якими вона працює, були відсортовані). Це дозволить вам зосередитись лише на звичайних рядках, просто на рядках, що знаходяться в одному або іншому файлі, використовуючи -1для придушення рядків лише у першому файлі, -2придушення рядків лише у другому файлі або -3придушення рядків в обох, так що перегляньте всі рядки, що знаходяться лише в першому файлі, а не в другому, який ви могли зробити

comm -23 <(sort file1) <(sort file2)

Звичайно, якщо ви хочете, що ви можете також розглянути можливість використання grepподібних

grep -vFxf file2 file1

який буде розглядати рядки file2як шаблони і друкувати лише рядки з file1, які не відповідають ( -v) при обробці рядків з ( -f), file2як фіксованих рядків ( -F), які повинні відповідати всьому рядку ( -x).

grepРішення має перевагу , не потребуючи для сортування файлів, але він перевіряє тільки для рядків в одному з файлів, які не в іншому, а не в обох напрямках одночасно.


Я наголошу, що commпотрібні відсортовані файли. (Так, ви згадуєте про це побічно, але легко не помітити те, як ви це висловили). Крім того, commдля цього сценарію набагато ефективніше, ніж diff. grepРішення може легко запустити з пам'яті , якщо file2велика (експоненціальне роздуття при перетворенні НКА в ДКА), у нас було питання про це не так давно.
dirkt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.