Я думаю, что это самый быстрый способ (будь то в Python или другой язык, вопрос не должен иметь слишком много ИМО).
Примечание:
1.I только хранить хэш каждой строки, чтобы сэкономить место (и время, если может произойти пейджинг)
2.Because вышеперечисленного, я печатаю только номера строк; если вам нужны реальные строки, вам просто нужно будет снова прочитать файлы
3. Я предполагаю, что хеш-функция не вызывает конфликтов. Это почти, но не совсем точно.
4.I import hashlib потому что встроенная функция hash() слишком короткая, чтобы избежать конфликтов.
import sys
import hashlib
file = []
lines = []
for i in range(2):
# open the files named in the command line
file.append(open(sys.argv[1+i], 'r'))
# stores the hash value and the line number for each line in file i
lines.append({})
# assuming you like counting lines starting with 1
counter = 1
while 1:
# assuming default encoding is sufficient to handle the input file
line = file[i].readline().encode()
if not line: break
hashcode = hashlib.sha512(line).hexdigest()
lines[i][hashcode] = sys.argv[1+i]+': '+str(counter)
counter += 1
unique0 = lines[0].keys() - lines[1].keys()
unique1 = lines[1].keys() - lines[0].keys()
result = [lines[0][x] for x in unique0] + [lines[1][x] for x in unique1]
ли вы имеете в виду, что 99,9% из * файлы * идентичны, или 99,9% * линии * идентичны (т. е. повторяется одна и та же линия)? – bstpierre
Вам не нравится порядок линий? Имеет ли B все линии A в том же порядке, что и A? Может ли быть переупорядочение, удаление строк?Существуют ли повторяющиеся строки, количество которых имеет значение (A имеет n раз, B имеет n-b раз-> разность b * line) –
Если вы спросите о «готовых инструментах командной строки», вы можете указать ОС. В большинстве случаев «diff» является либо родным, либо портированным. Тем не менее, я не могу быть уверен, что вы хотите от вашего вопроса: возможно, в Linux: sort --unique < file1 > uniq1; sort --unique < file2 > uniq1; diff uniq [12]. –