Сравнение двух списков с помощью сценария оболочки

StackOverflow https://stackoverflow.com/questions/1600268

  •  05-07-2019
  •  | 
  •  

Вопрос

Предположим, у меня есть два списка чисел в файлах f1, f2, каждый номер один на строку. Я хочу увидеть, сколько чисел в первом списке нет во втором, и наоборот. В настоящее время я использую grep -f f2 -v f1, а затем повторяю это с помощью сценария оболочки. Это довольно медленно (квадратичное время болит). Есть ли лучший способ сделать это?

Это было полезно?

Решение

Мне нравится «комм» для такого рода вещей. (файлы должны быть отсортированы.)

$ cat f1
1
2
3
$ cat f2
1
4
5
$ comm f1 f2
        1
2
3
    4
    5
$ comm -12 f1 f2
1
$ comm -23 f1 f2
2
3
$ comm -13 f1 f2
4
5
$ 

Другие советы

Не могли бы вы просто поместить каждое число в одну строку, а затем diff (1) их? Возможно, вам придется отсортировать списки заранее, хотя для того, чтобы это работало должным образом.

В особом случае, когда один файл является подмножеством другого , следующее:

cat f1 f2 | sort | uniq -u

перечислит строки только в большего файла. И, конечно, при переходе к wc -l будет показано количество.

Однако это не совсем то, что вы описали.

Этот однострочник часто служит моим конкретным потребностям, но я бы хотел увидеть более общее решение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top