2012-01-04 1 views
5

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

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

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

Любые идеи?

+4

Есть ли дублируют значения в одном файле? Некоторые примеры данных помогут. –

+1

позиционирует какую-либо разницу, или вы просто ищете подходящее существование в любой точке файла? как сказал @JohnZwinck, примеры данных помогут. – Radix

+0

Позиционирование не имеет значения, могут быть повторяющиеся значения. – rreeves

ответ

12

Использование 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

Если в файле 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

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

parallel 'tr "\000" "\n" <{} | sort -u' ::: file{1,2} | sort | uniq -d 
Смежные вопросы