Вопрос:
Как исключить из файла 1 строки, содержащиеся в файле 2? Например:
файл1:
1
2
3
4
файл2:
2
4
5
результат:
1
3
Ответ:
Никто не знает про команду comm? Данная утилита существует из покон веков и входит в состав пакета coreutils.
COMM(1) User Commands COMM(1)
NAME
comm - compare two sorted files line by line
SYNOPSIS
comm [OPTION]... FILE1 FILE2
DESCRIPTION
Compare sorted files FILE1 and FILE2 line by line.
With no options, produce three-column output. Column one contains
lines unique to FILE1, column two contains lines unique to FILE2, and
column three contains lines common to both files.
-1 suppress lines unique to FILE1
-2 suppress lines unique to FILE2
-3 suppress lines that appear in both files
--help display this help and exit
То есть, утилита сравнивает два заранее отсортированных файла, и выводит из них строки согласно заданным условиям. Условия регулируются следующими опциями:
- -1 - не показывать строки, уникальные для первого файла
- -2 - не показывать строки, уникальные для второго файла
- -3 - не показывать строки, которые одновременно содержатся в обеих файлах
Таким образом, команда для решения вышеуказанной задачи будет выглядеть так:
$ comm -2 -3 файл1 файл2
Не следует забывать, что comm работает корректно только с отсортированными файлами.