1

Будучи новичком в Linux, я пытаюсь скопировать, но добавить существующую информацию из нескольких обновленных списков в разных каталогах, к существующим файлам, которые могут иметь некоторую совпадающую информацию, но без дублирования.

/dir1/file1
/dir1/file2
/dir2/file1
/dir2/file2

Затем в файлах, например:

/ Dir1/ file1:

aaa
bbb
ccc

/ Dir2/ file1:

aaa
bbb
ccc
ddd
eee

Итак, я знаю, что обычно я могу cat /dir1 /file1 >> /dir2 /file1, но тогда результат будет выглядеть так, содержащий повторяющиеся строки:

aaa
bbb
ccc
ddd
eee
aaa
bbb
ccc

В отличие от других файлов могут быть:/dir1/file2

mmm
nnn
ooo

/ Dir2/ file2

mmm
nnn
zzz
yyy

Я хотел бы, чтобы окончательный файл /dir2 /file2 содержал:

mmm
nnn
ooo
zzz
yyy

Так как же мне сделать это, чтобы избежать дублирования строк в разных файлах в разных папках? Мы говорим о 468 файлах в приблизительно 115 папках, где в dir1 содержатся исходные более старые данные, а в dir2 - более новые, но могут отсутствовать некоторые оригинальные / пользовательские строки / записи. Это просто файлы данных, считываемые другой программой, поэтому это не код, но я все же предпочел бы не иметь лишних ненужных данных, вызванных дублированием, на несколько ГБ. Это сервер (CentOS 6) только с cli и прямым / полным доступом по ssh root.

Любая помощь будет оценена.

1 ответ1

0

Для дистрибутивов Debian пакет john включает в себя unique , который работает как несортированный uniq:

apt install john

После установки запустите:

cat /dir1/file2 /dir2/file2 | unique foo ; cat foo

Выход:

mmm
nnn
ooo
zzz
yyy

Обратите внимание, что поскольку утилиты * nix работают, текущая версия unique (v1.8.0-2) немного сырая, она не может выводиться в STDOUT или любой существующий файл. Поэтому необходимо новое временное имя выходного файла foo .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .