Получите пересечение между двумя файлами с помощью командной строки

Что является самым эффективным способом получить пересечение между двумя файлами, существует:

sort file1 file2 | uniq -d
1
задан 27 February 2017 в 09:00

3 ответа

Используйте grep командная строка в качестве следующего:

grep -Fx -f file1 file2
3
ответ дан 7 December 2019 в 12:51

Если Вы хотите объединить содержание двух файлов, тогда выполненных ниже команды,

awk 'NR==FNR' file1 file2
0
ответ дан 7 December 2019 в 12:51

Позвольте 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 и сократить), но ни один из них не намного более прост, чем это. Это, конечно, не означает, что нет никаких простых решений.

0
ответ дан 7 December 2019 в 12:51

Другие вопросы по тегам:

Похожие вопросы: