Попытка объединить файлы после удаления дублированного содержимого - PullRequest
0 голосов
/ 01 декабря 2011

Вот моя проблема.

У меня есть n файлов, и все они имеют общий и общий текст. Я хочу создать файл с использованием этих n файлов, чтобы новый файл содержал только уникальные строки, которые существуют во всех n файлах.

Я ищу команду bash, Python API, которая может сделать это для меня. Если есть алгоритм, я также могу попытаться его кодировать сам.

Ответы [ 4 ]

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

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

sort -u file1 file2 ...

Это (а) отсортирует все строки во всех файлах, а затем (б) удалит дубликаты. Это даст вам строки, которые являются уникальными среди всех файлов.

2 голосов
/ 01 декабря 2011

Для проверки общих данных вы можете использовать comm:

DESCRIPTION
     The comm utility reads file1 and file2, which should be sorted lexically, 
and produces three text columns as output: lines only in file1; lines only in 
file2; and lines in both files.

Другим полезным инструментом будет merge:

DESCRIPTION
merge  incorporates all changes that lead from file2 to file3 into file1. 
The result ordinarily goes into file1.  merge is useful for combining separate 
changes to an original.

sort может испортить ваш заказ.Вы можете попробовать следующую команду awk.Он не был проверен, поэтому убедитесь, что вы сделали резервную копию своих файлов.:)

awk ' !x[$0]++' big_merged_file

Это удалит все дубликаты из вашего файла.

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

Сначала нужно объединить все, затем отсортировать, а затем удалить дубликаты. </p> <p>#!/bin/bash<br> for file in test/*<br> do<br> cat "$file" >> final<br> done<br> sort final > final2<br> uniq final2 final<br> rm -rf final2<br>

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

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

# ( seq 1 5; seq 3 7; )
1
2
3
4
5
3
4
5
6
7
# ( seq 1 5; seq 3 7; ) | sort -nu
1
2
3
4
5
6
7
# ( seq 1 5; seq 3 7; ) | sort -n | uniq -u
1
2
6
7
# ( seq 1 5; seq 3 7; ) | sort -n | uniq -d
3
4
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...