Если известно, что поля в обоих файлах имеют одинаковый порядок и оба файла сортируются одинаково, используйте comm
(и если файлы не известны как отсортированныетогда некоторая предварительная обработка с sort
исправит это.)
comm -1 -3 oldfile newfile
Это будет список строк, которые появляются только в новом файле.
comm -1 -2 oldfile newfile
Это будет список строк, которые появляются только в обоих файлах.
Все вместе теперь
cat <(comm -1 -2 oldfile newfile) <(comm -1 -3 oldfile newfile) > combined
combined
теперь содержит строки, появляющиеся только в новом файле, плюс строки, появляющиеся в обоих старых файлах, которые также были в новом файле.
Примечание. Этоэто примерно то же самое, что просто сказать comm -1 oldfile newfile
, но без каких-либо забавных отступов.
К сожалению, вы не можете напрямую записать обратно в oldfile, потому что он может быть обрезан перед чтением.Просто mv -f combined oldfile
когда закончите.