Управление дублированными строками в файлах

Я генерирую все общие / повторяющиеся строки между 5 файлами в одном каталоге

sort *.txt | uniq -d > output.txt 

Мне нужно, чтобы output.txt был объединен с File1.txt (поэтому добавляется все, что не является дубликатом), однако в другом месте, в файле File2.txt, если появляется повторяющаяся строка, его нужно удалить.

Любые указатели? Использование Debian

EDIT: Объединение вывода с File1 легко, как

 cat output.txt >> File1.txt 

затем просто удаляя дубликаты после регулярного выражения.

Вы можете обойти оба файла (output и file1.txt), затем найти строки uniq, используя только uniq (без переключателей) и, наконец, записать результат обратно в file1.txt

Пример:

 $ cat output.txt Line1 $ cat file1.txt Line1 Line3 Line4 $ echo "$(cat output.txt file1.txt |sort |uniq)" >file1.txt $ cat file1.txt Line1 Line3 Line4 

Если вы хотите, чтобы строка «Line1» была полностью удалена и не сохранялась ровно один раз, используйте uniq -u.

 $ echo "$(cat output.txt file1.txt |sort |uniq -u)" >file1.txt && cat file1.txt Line3 Line4 

Аналогичная операция для вашего файла2.

PS: Вы не можете писать и писать в одном файле за одну операцию. Вам нужно либо использовать трюк echo $(...) выше, либо отправить вывод cat |uniq в другой файл (файл temp), а затем либо переименовать tempfile в файл1 ( mv tempfile file1.txt ), либо cat tmpfile >file1.txt && rm tmpfile .

Другим решением было бы добавить output.txt в файл file1.txt ( cat output.txt >>file1.txt ) и использовать sed -i для удаления повторяющихся строк