длинный файл минус короткий файл, равный новому файлу, повторяющийся в каждой строке - PullRequest
2 голосов
/ 09 декабря 2011

Я пытаюсь bash-скрипт, и, похоже, я задаю вопрос неправильно или не могу найти улучшенный пример.

Я беру два файла, которые имеют списки.

file1:

aa
bb
cc
dd
ee
ff

file2:

bb
dd
ff

Создать file3 = file1 строк - (соответствующие строки в file2, в любой точке в file1)

file3:

aa
cc
ee

Спасибо за любую помощь или направление.

Ответы [ 3 ]

3 голосов
/ 09 декабря 2011

как насчет

 fgrep -v -f file2 file1
1 голос
/ 09 декабря 2011

Если каждая строка из file2 встречается в file1, это довольно просто:

 sort file1 file2 | uniq -u

Если файлы не могут быть отсортированы, и вы не знаете, выполняется ли указанное выше условие (примерно для каждогострока), awk может сделать это так:

awk 'BEGIN { while ((getline line < "file2" > 0) {
                   f2[line]++
             }
           }
     f2[$0] > 0 { print }' file1

Примечание : я бы не использовал его с очень большими file2.

1 голос
/ 09 декабря 2011

Если все в порядке с файлами, вы можете использовать это:

comm -2 -3 <(sort file1) <(sort file2)

Я думаю, что красноречивый способ описать то, что вы хотите, - это относительное дополнение или различие набора. На самом деле, страница Википедии для комплимента содержит примеры кода на многих языках, включая мое решение выше, без встроенной сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...