Какой простой способ сделать различий между двумя файлами? - PullRequest
32 голосов
/ 03 апреля 2009

У меня есть два файла, в которых некоторые строки изменили порядок. Я хотел бы иметь возможность сравнить их.

Один сайт предложил что-то похожее на это:

diff <(sort text2) <(sort text1)

Но это приводит к ошибке: Отсутствует имя для перенаправления.

Я использую tcsh. Это команда выше для другой оболочки?

Есть ли лучший способ?

Ответы [ 5 ]

49 голосов
/ 03 апреля 2009

Этот синтаксис перенаправления зависит от bash. Таким образом, он не будет работать в tcsh.

Вы можете вызвать bash и указать команду напрямую:

bash -c 'diff <(sort text2) <(sort text1)'
13 голосов
/ 17 октября 2012

Вот функция для этого:

function diffs() {
        diff "${@:3}" <(sort "$1") <(sort "$2")
}

Назовите это так:

diffs file1 file2 [other diff args, e.g. -y]

Предположительно, вы можете изменить его в соответствии с ответом Дэвида Шмитта при необходимости

3 голосов
/ 28 ноября 2018

Есть ли лучший способ?

Да, есть.

Использование comm Утилита:

использование: комм [-123i] файл1 файл2

3 голосов
/ 03 апреля 2009

Если это не работает для вашей оболочки, просто сделайте это в 3 строки:

sort text1 > text1.sorted
sort text2 > text2.sorted
diff text1.sorted text2.sorted

Просто, но должно работать ...

1 голос
/ 03 апреля 2009

Проблема с вашим опубликованным 'diff' заключается в том, что diff может получать только один файл через stdin. Поэтому я думаю, что вам придется записать хотя бы один отсортированный файл во временный файл.

diff - file.txt

будет отличаться от стандартного файла file.txt. '-' представляет стандартный номер

РЕДАКТИРОВАТЬ: Я предполагал, что замена процесса будет работать через стандартный ввод. Но это не тот случай, и вышеописанное происходит через /dev/fd/{num}, как указано выше в VardhanDotNet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...