Пересечение с несколькими файлами
У меня есть 4 текстовых файла, в которых каждый файл имеет один столбец данных (~2000 строк в каждом файле). То, что я пытаюсь сделать, это сравнить все файлы и определить, что перекрывается между различными файлами. Итак, я хотел бы знать, что находится в файле 1, но не в других 3 файлах, и что находится в файле 2, но не в других 3, что находится только в файле 1 и файле 2 и т. Д. Конечная цель состоит в создании диаграммы Венна с 4 перекрывающихся круга, показывающие различные перекрытия между файлами.
Я ломал голову, пытаясь понять, как это сделать. Я играл с командами comm и diff, но у меня проблемы с этим со всеми файлами. Есть ли у кого-нибудь предложения о том, как это сделать?
Спасибо за любую помощь или предложения.
1 ответ
Предполагая 4 файла с именем a b c d
строки, существующие в файле a, но не в других (я предполагаю, что ^ - это символ, не используемый ни в одном из файлов):
for l in `cat a | sort | uniq`;do echo $l^`grep -c $l b c d`;done | grep 'b:0 c:0 d:0$' | cut -d\^ -f1
линии, существующие во всех из них:
for l in `cat a | sort | uniq`;do echo $l^`grep -c $l b c d`;done | grep 'b:[1-9]* c:[1-9]* d:[1-9]*$' | cut -d\^ -f1
...