Сравнить 2 файла Unix и строки соответствия выходных данных в новый файл? - PullRequest
5 голосов
/ 04 января 2012

У меня есть 2 файла nix.Все данные находятся в одной строке в каждом файле.Каждое значение отделяется нулевым символом.Некоторые из значений в данных совпадают.

Как бы я проанализировал эти данные в новый файл, содержащий только совпадающие значения?

Я думаю, я мог бы использовать sed, чтобы заменить нулевые символы на новые строки?С этого момента я не совсем уверен ...

Есть идеи?

Ответы [ 3 ]

12 голосов
/ 04 января 2012

Используйте tr, sort и comm:

Преобразуйте пустые значения в новые строки и отсортируйте результат:

$ tr '\000' '\n' < file1 | sort > file1.txt
$ tr '\000' '\n' < file2 | sort > file2.txt

, затем используйте comm, чтобы получитьстроки, общие для обоих файлов:

$ comm -1 -2 file1.txt file2.txt
<lines shown here are the common lines between file1.txt and file2.txt>
5 голосов
/ 04 января 2012

Если в файле file1 или file2 нет повторяющихся значений, вы можете сделать это:

( tr '\0' '\n' < file1; tr '\0' '\n' < file2 ) | sort | uniq -c | egrep -v '^ +1'

Это подсчитает все повторяющиеся значения между двумя файлами.

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

comm -1 -2 <(tr '\0' '\n' < file1) <(tr '\0' '\n' < file2)

Этот подход не переносим, ​​он требует функции «подстановка процесса» в Bash.

1 голос
/ 12 февраля 2012

Это может работать для вас:

parallel 'tr "\000" "\n" <{} | sort -u' ::: file{1,2} | sort | uniq -d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...