Diffing два больших текстовых файла

Я могу предложить несколько сложный ответ, без архивирования, но включая tar?

Здесь мы идем:

tar -cf - ./bin | ssh target.org " ( cd /home/earlz/blah ; tar -xf - ) "

Это упакует каталог./bin tar (-cf: = создайте файл), имя файла - (ни один, stdout), и передайте его по каналу посредством ssh-команды на target.org (который мог бы также быть IP), где команда в кавычках выполняется, который является: CD, чтобы болтать, и смолить-xf (извлекают файл) - ни один, никакое имя, просто stdin.

Это - как будто Вы упаковываете пакет дома, приносите его к сообщению, затем ездите на работу, где Вы ожидаете пакет и открываете его.

Возможно, существует намного более изящное решение, которое просто использует sftp.

33
16.09.2010, 17:11
2 ответа

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

diff --speed-large-files a.file b.file

Вы упоминаете неотсортированные файлы поэтому, возможно, необходимо отсортировать файлы сначала

sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted

Вы могли сохранить создание дополнительного выходного файла путем передачи по каналу 2-го вывода вида, прямого в разность

sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -

Очевидно, они будут работать лучше всего в системе с большим количеством доступной памяти, и Вам, вероятно, будет нужно много свободного пространства на диске также.

Не было ясно из Вашего вопроса, попробовали ли Вы их прежде. Раз так затем было бы полезно знать то, что пошло не так, как надо (занял слишком много времени и т.д.). Я всегда находил, что вид запаса и различные команды имеют тенденцию делать, по крайней мере, а также пользовательские команды, если нет некоторые очень зависящие от домена свойства файлов, которые позволяют сделать вещи по-другому.

45
27.01.2020, 19:37
  • 1
    +1. Можно опустить все временные файлы с именованными каналами. Использовать mkfifo создать [ab].file.sorted перед использованием их, как произведено для sort. Помещенный оба sorts с & в фоновом режиме и использование оба, переданные по каналу как имена файлов для различного –  krissi 16.09.2010, 14:45
  • 2
    @krissi можно также выполнить тот же эффект с помощью этого синтаксиса: diff <(command 1) <(command 2) –  Michael Mrozek♦ 16.09.2010, 17:12
  • 3
    Спасибо работало. Мне были нужны несколько ГБ мысли памяти, но экземпляр Amazon EC2 на 16 ГБ зафиксировал ее :) –  jonasl 16.09.2010, 18:28
  • 4
    , Если кто-то как я задастся вопросом почему <(cmd1) <(cmd2) работы синтаксиса (поскольку это походит на вход стандарта перенаправления дважды!), попробовать echo hello <(cmd1) <(cmd2). Вы будете видеть что-то как hello /dev/fd/63 /dev/fd/62 который внезапно проясняет ;) –  alex 16.09.2010, 22:53
  • 5
    По моему опыту, --speed-large-files опция не помогает, если у Вас нет достаточного количества RAM. Кроме того, предварительная сортировка не полезна, если у Вас есть многострочная рекордная структура, Вы хотите сохранить. Опции, упомянутые выше (@unhammer), интересны, но вывод от rdiff и bsdiff является довольно двоичным. Установка bdiff от Семейной реликвии Панель инструментов похожа на dauning задачу (требует Семейной реликвии devtools, прекратившихся заголовочных файлов, …). Это действительно стоит усилия? Есть ли другие альтернативы? –  Christian Pietsch 02.02.2015, 19:33
  • 6
    По моему опыту, --speed-large-files опция не помогает, если у Вас нет достаточного количества RAM. Кроме того, предварительная сортировка не полезна, если у Вас есть многострочная рекордная структура, Вы хотите сохранить. Опции, упомянутые выше (@unhammer), интересны, но вывод от rdiff и bsdiff является довольно двоичным. Установка bdiff от Семейной реликвии Панель инструментов похожа на dauning задачу (требует Семейной реликвии devtools, прекратившихся заголовочных файлов, …). Это действительно стоит усилия? Есть ли другие альтернативы? –  Christian Pietsch 02.02.2015, 19:33

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

5
27.01.2020, 19:37

Теги

Похожие вопросы