#macos #ubuntu #terminal #string-search
#macos #ubuntu #терминал #строка-поиск
Вопрос:
Как вы находите пересечение 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. Что вы подразумеваете под пересечением в данном случае? Можете ли вы предоставить краткий пример ввода и желаемый результат?
2. вот и все…
Ответ №1:
Вы можете объединить greps в цепочку:
grep -f 1.txt 2.txt
| grep -f- 3.txt
| grep -f- 4.txt
-f-
Означает, что используются входные данные, поступающие из канала, а не реальный файл.
Комментарии:
1. @sanjihan: А как насчет
grep -f <(grep -f <(grep -f 1.txt 2.txt) 3.txt) 4.txt
?2. Это правильно, я неверно истолковал свои данные. Спасибо!
Ответ №2:
Вы можете найти пересечение между двумя:
$ 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