Что является самым эффективным способом получить пересечение между двумя файлами, существует:
sort file1 file2 | uniq -d
Используйте grep
командная строка в качестве следующего:
grep -Fx -f file1 file2
Если Вы хотите объединить содержание двух файлов, тогда выполненных ниже команды,
awk 'NR==FNR' file1 file2
Позвольте file1 = 'A\nA' и file2 = 'A\nA\nA'. Пересечение просто или 'A\nA'? Другими словами, действительно ли количество раз является той же строкой, появляется в обоих релевантные файлы?
Если это будет просто это, то будет работать:
sort <(sort file1 | uniq) <(sort file2 | uniq) | uniq -d
Проблема с подходом, данным в вопросе, состоит в том что, даже если строка не существует в обоих файлах, если повторяется в одном, что это появится в результате. Так, мы должны удалить повторения в файлах сначала с помощью sort fileX | uniq
.
Если это будет 'A\nA' затем, то это будет работать:
sort <(sort file1 | awk '{if ($0 == prev) c++; else c=0; print c, $0; prev = $0;}') <(sort file2 | awk '{if ($0 == prev) c++; else c=0; print c, $0; prev = $0;}') | uniq -d | cut -d' ' -f2-
Я могу думать о еще много лайнеров (с awk, видом, uniq и сократить), но ни один из них не намного более прост, чем это. Это, конечно, не означает, что нет никаких простых решений.