file1
두 개의 파일 이 있고 file2
이 두 파일에는 . 한 줄에 하나의 이름입니다. 에 있는 모든 이름 file2
또는 not equal to
에 있는 suffix of
이름을 쿼리하고 싶습니다 file1
. 접두사는 .
임의의 문자와 점( ) 및 접미사로 식별됩니다.
예를 들어. file2
포함이 f2name
행에 있고 file1
포함이 sub.f2name
에 f2name
있는 이름의 접미사 인 경우 file1
결과에 포함하고 싶지 않습니다.
또 다른 예는 입니다 sub1.sub2.f2name
. in names
앞에는 file1
여러 개의 접두사(점으로 구분된 문자)가 올 수 있습니다. 이름은 file2
원하는 수의 접두사에 대한 접미사로 표시되거나 의 이름과 동일할 수 있습니다 file1
.
쿼리의 이름이 file2
같지 않고 이름 접두사의 접미사가 아닌 이름이 필요합니다 file1
. 예: 다음을 file2
포함합니다:
bb.com
a.com
123.com
file1
포함하다:
aa.bb.com
aa.ff.bb.com
aa.bb.cc.com
a.com
내가 원하는 이름은 file2
같지도 않고 이름 접미사도 아닌 이름입니다 file1
. 즉:
123.com
출력 이유:
a.com
in은 in 의 file2
이름과 동일하며 from 은 and in의 접미사입니다 (참고: 접두사는 한두 번 이상 반복될 수 있습니다. 중요한 것은 이름이 in으로 끝난다는 것입니다).file1
aa.bb.com
bb.com
file2
aa.ff.bb.com
aa.bb.com
file1
file2
MySQL을 사용하여 쿼리를 시도했습니다. 그러나 file2에는 300만 줄이 포함되고 file1에는 100만 줄이 포함됩니다. MySQL이 제대로 작동하지 않습니다. 합리적인 시간 내에 이러한 쿼리를 수행할 수 있는 명령이 Linux에 있습니까?
답변1
귀하의 의견에 따르면 이것이 얼마나 효율적인지는 모르겠지만 가능한 전략은 다음과 같습니다.
file2
라인을 라인 앵커 정규식 패턴으로 변환sed -e 's/\./\\./g' -e 's/$/\$/' file2
패턴을 grep으로 파이프하여 일치하는 부분만 출력합니다.
file1
... | grep -of - file1
(선택사항) 고유한 결과
file2
일치하는 항목 에 대한 일반 텍스트 검색... | grep -vxFf - file2
전임자.
$ sed -e 's/\./\\./g' -e 's/$/\$/' file2 |
grep -of - file1 |
sort -u |
grep -vxFf - file2
123.com
file2
항목에 이들 이외의 정규식 특수 문자가 포함되어 있는 경우에도 .
이스케이프해야 합니다.