Протестировал esc + d и alt / opt + d на OSX Mavericks, и они там тоже работают.
Если они отсортированы и разделены символами новой строки, вы можете использовать comm показать строки, которые уникальны для файла1:
comm -23 file1 file2
Демонстрация:
$ comm -23 <(echo -e 'john\nmike\nanna\npaul\nlaura'|sort) <(echo -e 'john\nmike\npaul'|sort)
anna
laura
Или вы могли бы diff сделать то же самое (grep ищет удаление строк):
diff sorted-file-1 sorted-file-2 | grep -oP '(?<=< ).+'
Если вам нужно избегать сортировки или вы имеете дело с серьезными цифрами , Я бы перешел на правильный язык для поиска на основе словаря. Простой пример python:
file2 = {}
with open("file2") as f:
for line in f:
file2[line] = 0
with open("file1") as f:
for line in f:
if not line in file2:
print line
Все, что больше, и вы можете посмотреть фактическую базу данных и некоторый простой SQL. Они предназначены для больших данных.
И параметр python: независимо от того, все ли слова находятся в одной строке или в отдельных строках:
#!/usr/bin/env python3
import sys
f1 = sys.argv[1]; f2 = sys.argv[2]
def read(f):
with open(f) as content:
return content.read().split()
for item in [w for w in read(f1) if not w in read(f2)]:
print(item)
Скопируйте сценарий в пустой файл, сохраните его как showdiff.py, выполнив его и запустите это по команде:
/path/to/showdiff.py file1 file2
anna
laura
Не вопрос, но слишком много связано с отсутствием:
Если вам нужно перечислить различия взаимно , (а не только слова из file1, которые не фигурируют в file2, но также слова в file2, которые не отображаются в file1). Необходимо использовать следующий сценарий:
#!/usr/bin/env python3
import sys
f1 = sys.argv[1]; f2 = sys.argv[2]
def read(f):
with open(f) as content:
return content.read().split()
wds1 = read(f1); wds2 = read(f2); allwords = wds1+wds2
for item in [w for w in allwords if (w in wds1, w in wds2).count(False) == 1]:
print(item)
Если вы перейдете к опции python, как предложено Jacob Vlijm, стоит использовать «set» (дополнительную информацию см. на странице https://docs.python.org/3/library/stdtypes.html#set-types -set-frozenset). В принципе, как только вы создали два набора, вы можете достичь заданной математики (объединение, пересечение, разность и т. Д.). В этом случае заданная разность - это именно то, что вам нужно: новый набор со всеми элементами, которые находятся в одном наборе и а не в другом. Тогда код из Джейкоба будет:
#!/usr/bin/env python3
import sys
f1 = sys.argv[1]; f2 = sys.argv[2]
def read_set(f):
with open(f) as content:
return set(content.read().split())
for item in read_set(f1) - read_set(f2)]:
print(item)
Конечно, для миллиардов записей это займет некоторое время ... `