Если размеры файла сопоставимы, оптимальное решение к sort
оба файла столбцом Вы интересуетесь и затем join
их тем столбцом. Если размеры файла N
и M
затем асимптотическое время выполнения O(N*log(N)+M*log(M))
.
Если один из файлов очень намного меньше, чем другой, то O(N*M)
решение в других ответах лучше.
мусор в трейлинге означает, что в конце файла имеются посторонние данные, не входящие в формат bz2
; поэтому bz2
не могут иметь никакого смысла дополнительные данные (отсюда и мусор).
Если вы хотите спровоцировать ошибку:
$ echo Hello World | bzip2 > helloworld.bz2
$ echo Something not bzip2... >> helloworld.bz2
$ bunzip2 < helloworld.bz2
Hello World
bunzip2: (stdin): trailing garbage after EOF ignored
Первая команда создает действительный bzip2-файл, который содержит сообщение Hello World
.
Вторая команда добавляет Что-то не bzip2....
к файлу bzip2. Это мусор, потому что он не сжат bzip2.
Выполняя эту команду через bzip2
выдает действительные данные, но печатает предупреждение о посторонних, игнорируемых данных.
В конце концов, данные, которые были первоначально сжаты, остаются нетронутыми, но в конце файла произошло нечто странное. Возможно, стоит посмотреть на это в шестнадцатиричном редакторе; иногда можно сказать, что произошло, а иногда нет.
$ hexdump -C helloworld.bz2
00000000 42 5a 68 39 31 41 59 26 53 59 d8 72 01 2f 00 00 |BZh91AY&SY.r./..|
00000010 01 57 80 00 10 40 00 00 40 00 80 06 04 90 00 20 |.W...@..@...... |
00000020 00 22 06 86 d4 20 c9 88 c7 69 e8 28 1f 8b b9 22 |."... ...i.(..."|
00000030 9c 28 48 6c 39 00 97 80 53 6f 6d 65 74 68 69 6e |.(Hl9...Somethin|
00000040 67 20 6e 6f 74 20 62 7a 69 70 32 2e 2e 2e 0a |g not bzip2....|
Этот пример очевиден, так как в сжатых bzip2 данных вы обычно не видите обычного текста, подобного этому.
Большой вопрос, был ли мусор приложен (как в примере выше, оставив оригинальные данные нетронутыми), или произошло какое-то повреждение. Невозможно сказать по сообщению об ошибке (сам bzip2 не знает), однако, если бы это было случайное повреждение, вы бы тоже увидели некоторые сообщения об ошибке tar.
Если вы знаете точные параметры сжатия для файла (вероятно, только по умолчанию), вы можете получить фактические данные трейлинга:
Чтобы получить размер реального сжатого архива tar, перекомпрессуйте его.
Используя размер полученного файла - который должен быть меньше, чем размер исходного файла (может быть всего на один байт), получим часть после реальных данных:
tail -c +12345 witTrailingData.tar.bz2
(Это может быть дификулт с большим файлом)
.