Каталог / etc / skel на самом деле содержит все настройки вашей системы. Вам может помочь его резервное копирование и восстановление в новой установке.
Попробуйте:
$ awk -F'|' 'FNR==NR{a[$1,$2]=1; next} !a[$1,$2]' file1 file2
TEST|123461|JOHN|DOE||
TEST|123462|STEVE|SMITH||
-F'|'
указывает awk использовать |
в качестве разделителя полей.
FNR==NR{a[$1,$2]=1; next}
Для строк, принадлежащих первому файлу (FNR==NR
), это указывает awk добавить запись в ассоциативный массив a
под ключом $1,$2
со значением 1
.
!a[$1,$2]
Это говорит awk печатать любую строку, для которой !a[$1,$2]
верно. Поскольку !
является логическим отрицанием, это означает, что печатается любая строка, для которой a[$1,$2]
является ложным (нулем ).
Это означает, что строки, для которых мы установили a[$1,$2]=1
, будут пропущены (, а не напечатаны ). Другие строки будут напечатаны.
join
от GNU coreutils имеет опцию -v
, которая печатает непарные -строки из одного из двух исходных файлов. Использование этого для инвертирования спичек работает хорошо:
$ cat file1.txt
TEST|123456
TEST|123457
TEST|123458
TEST|123459
TEST|123460
$ cat file2.txt
TEST|123456|RAY|DOE||
TEST|123457|JANE|DOE||
TEST|123458|ROSE|DAWN||
TEST|123459|GEORGE|BRID||
TEST|123460|RALPH|DOE||
TEST|123461|JOHN|DOE||
TEST|123462|STEVE|SMITH||
$ join -t '|' -j 2 -o '2.1,2.2,2.3,2.4' -v 2 file1.txt file2.txt
TEST|123461|JOHN|DOE
TEST|123462|STEVE|SMITH
В Grep есть возможность получить регулярные выражения для сопоставления из файла.
Чтобы сделать первый файл регулярным выражением, нам нужно только добавить ^
в начало каждой строки. Это можно сделать с помощью команды sed, например sed 's/.*/^&/' file1
.
Затем мы передаем результат sed в grep следующим образом (ksh, zsh, bash):
grep -vf <(sed 's/.*/^&/' file1) file2