Подтвердить что ты не робот

Сравнение двух несортированных списков в 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)
4b9b3361

Ответ 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