Подтвердить что ты не робот

Что такое простой способ выполнить сортировку между двумя файлами?

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

На одном веб-сайте было предложено следующее:

diff <(sort text2) <(sort text1)

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

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

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

4b9b3361

Ответ 1

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

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

bash -c 'diff <(sort text2) <(sort text1)'

Ответ 2

Здесь функция для него:

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

Назовите его следующим образом:

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

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

Ответ 3

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

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

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

Ответ 4

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

diff - file.txt

будет diff stdin против файла .txt. '-' представляет stdin

EDIT: Я предположил, что подстановка процесса будет работать через stdin. Но это не тот случай и выше происходит через /dev/fd/{num}, как указано VardhanDotNet выше.