Сравнение двух списков с помощью сценария оболочки - PullRequest
2 голосов
/ 21 октября 2009

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

Ответы [ 3 ]

8 голосов
/ 21 октября 2009

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

$ 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
$ 
2 голосов
/ 21 октября 2009

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

1 голос
/ 21 октября 2009

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

cat f1 f2 | sort | uniq -u

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

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

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

...