Сравнение двух несортированных списков в linux, перечисление уникальных во втором файле
У меня есть 2 файла со списком номеров (телефонных номеров).
Я ищу способ перечисления чисел во втором файле, который отсутствует в первом файле.
Я пробовал различные методы с:
comm (getting some weird sorting errors)
fgrep -v -x -f second-file.txt first-file.txt (unsure of the result, there should be more)
Ответы
Ответ 1
grep -Fxv -f first-file.txt second-file.txt
В основном ищет все строки в second-file.txt
, которые не соответствуют строке в first-file.txt
. Может быть медленным, если файлы большие.
Кроме того, после сортировки файлов (используйте sort -n
, если они являются числовыми), тогда также должен был работать comm
. Какая ошибка это дает? Попробуйте следующее:
comm -23 second-file-sorted.txt first-file-sorted.txt
Ответ 2
Вам нужно использовать comm
:
comm -13 first.txt second.txt
выполнит эту работу.
пс. порядок первого и второго файлов в командной строке.
также вам может потребоваться отсортировать файлы до:
comm -13 <(sort first.txt) <(sort second.txt)
в случае, если файлы имеют числовое значение, добавьте -n
к sort
.
Ответ 3
Это должно работать
comm -13 <(sort file1) <(sort file2)
Кажется, что sort -n (numeric) не может работать с comm, который использует сортировку (буквенно-цифровое) внутри
f1.txt
1
2
21
50
f2.txt
1
3
21
50
21 должен появиться в третьем столбце
#WRONG
$ comm <(sort -n f1.txt) <(sort -n f2.txt)
1
2
21
3
21
50
#OK
$ comm <(sort f1.txt) <(sort f2.txt)
1
2
21
3
50
Ответ 4
cat f1.txt f2.txt | sort |uniq > file3