주어진 파일과 공통된 단어가 있는 파일 목록을 만드는 가장 좋은 방법은 무엇입니까? 예를 들어 다음과 같은 경우가 있습니다.
$ ls
mainFile file1 file2 file file4
$ cat mainFile
exquisite malicious sentient pulsating
perspicacious one
tawdry fumigate Baryshnikov O'connor
.cwd
mainFile
이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
한 줄당 단어 수가 mainFile
일정하지 않기 때문에 cut
몇 가지 트릭을 사용하여 해결책을 찾았습니다. 단어로 문자열을 만든 다음 이를 명령 |
으로 구분 하여 넣으려고 합니다 grep -l "exquisite|malicious|etc" *
. 나는 어떤 접근 방식에도 열려 있지만 이것이 더 나을 수도 있습니다.
답변1
먼저 mainFile에 대한 인덱스를 생성하고,
sed 's/ /\n/g' mainFile | sort | uniq > mainFile.idx
그런 다음 고정 문자열을 grep합니다.
grep -F -f mainFile.idx file*
답변2
grep
비표준 옵션을 지원하는 경우 -w
(단어 일치에 대해):
grep -lwFe "$(tr -cs "[[:alnum:]_'-]" '[\n*]' < mainfile | sort -u)" file*
답변3
다음 코드를 사용하세요:
for pattern in `cat mainfile`
do
grep -l "$pattern" file*
done
아룬