2016-10-24 7 views
0

Как найти пересечение 4 файлов?найти пересечение 4 файлов

Я использовал grep -Fx -f 1.txt 2.txt 3.txt 4.txt, но кажется, что он работает только для 2-х файлов. Аналогично comm -12 1.txt 2.txt не может быть расширен до 4 файлов и требует сортировки данных. Мои данные не отсортированы, на самом деле этого не должно быть. Я нахожусь на Mac.

Входной сигнал:

1.txt 
.css 
.haha 
.hehe 
2.txt 
.ajkad 
.shdja 
.hehe 

3.txt 
.css1 
.aaaaa 
.hehe 

4.txt 
.qwqw 
.kkkmsm 
.hehe 

Выход: .hehe

Я использовал Grep сначала на 1 и 2, хранящейся в 12.txt, чем на 3 и 4, хранится в 34.txt затем используется Grep снова 12.txt и 34.txt. Но должен быть лучший способ сделать это.

+1

Что вы подразумеваете под пересечением в этом случае? Можете ли вы предоставить короткий пример ввода и желаемый результат? – dawg

+0

там вы идете ... – sanjihan

ответ

1

Вы можете приковать отбирает:

grep -f 1.txt 2.txt \ 
| grep -f- 3.txt \ 
| grep -f- 4.txt 

-f- означает вход, поступающего из трубы используется, а не реальный файл.

+0

Din't произведение. grep: -: нет такого файла или каталога – sanjihan

+0

@sanjihan: Как насчет 'grep -f <(grep -f <(grep -f 1.txt 2.txt) 3.txt) 4.txt'? – choroba

+0

hmm .. возвращает неправильный результат – sanjihan

1

Вы можете найти пересечение между двумя:

$ grep -Fx -f f1.txt f2.txt 
.hehe 

затем использовать в качестве входных данных с двумя другими:

$ grep -f <(grep -Fx -f f1.txt f2.txt) f3.txt f4.txt 
f3.txt:.hehe 
f4.txt:.hehe 

Или, если вы просто хотите одно слово:

$ grep -f <(grep -f <(grep -Fx -f f1.txt f2.txt) f3.txt) f4.txt 
.hehe 
+0

hm, к сожалению, он возвращает неверный результат – sanjihan

Смежные вопросы