결과

결과

2개의 데이터 열이 포함된 파일이 있습니다. 각 열에서 공통 문자열이 있는 행을 찾아야 합니다. 나는 열 1, 행 10 및 열 2, 행 3에서 문자열을 일치시키는 것이 아니라 행별로 일치하는 데만 관심이 있습니다.

내 파일:

023q                                              023q023q
0adc                                              0adc0adc
123456                                              123456
abcde                                             abcdefg
08tgdf                                            90alkhg

따라서 이 예에서는 마지막 행을 제외한 모든 행이 공통 문자열을 공유합니다. 해당 행의 일부는 동일하며 이것이 바로 제가 찾아야 할 것입니다. 두 문서 모두에서 공통 문자열에 대한 수많은 질문과 스레드를 보았지만 지금까지 정확한 사용 사례에 대해서는 아무것도 없습니다.

업데이트: 각 줄은 순서대로 최소 4자 이상 일치해야 합니다.

답변1

짧은멍하니방법:

awk '(index($1, $2) !=0 && length($2) >= 4) || (index($2, $1) !=0 && length($1) >= 4)' file

산출:

023q                                              023q023q
0adc                                              0adc0adc
123456                                              123456
abcde                                             abcdefg

인덱스(in,find)
검색 문자열존재하다문자열이 처음으로 나타나는 경우찾다, 문자열에서 문자열이 나타나기 시작하는 문자 위치를 반환합니다.존재하다.


이상복잡한2개의 입력 문자열에서 최소 4자 길이의 가장 긴 공통 하위 문자열을 찾아야 하는 경우 다음을 권장합니다.파이썬 방법:

입력 파일이 약간 "복잡"하고 다음 줄을 포함한다고 가정합니다.

1023q                                              023q023q
v0adc                                              20adc0adc
s123456                                              123456
eabcde                                             cabcdefg
08tgdf                                            90alkhg

가장 긴 공통 부분 문자열을 찾으려면 다음을 사용하십시오.시퀀스 일치자수업차이 라이브러리기준 치수.

find_common_lines.py스크립트:

import re
from difflib import SequenceMatcher

with open('filename', 'r') as fh:
    for l in fh.read().splitlines():
        items = re.findall(r'\S+', l.strip())  # getting 2 comparable strings
        m = SequenceMatcher(None, items[0], items[1]).find_longest_match(0, len(items[0]), 0, len(items[1]))
        if m.size >= 4:
            print(l)

용법(다른 것이 있을 수도 있습니다.파이썬버전 3.x, 현재 사례가 테스트되었습니다.파이썬3.5):

python3.5 find_common_lines.py

산출:

1023q                                              023q023q
v0adc                                              20adc0adc
s123456                                              123456
eabcde                                             cabcdefg

답변2

regexes이 문제를 해결하려면 현재의 전력을 사용해야 하며 , RE데이터를 조사하는 동안 엔진이 모든 무거운 작업을 수행하도록 해야 합니다.

sed -n '/\(\S\{4,\}\).*\s.*\1/p' yourfile

결과

023q                                              023q023q
0adc                                              0adc0adc
123456                                              123456
abcde                                             abcdefg

관련 정보