패턴 파일을 사용하는 Grep 문제

패턴 파일을 사용하는 Grep 문제

다음과 같은 문제가 발생했습니다(질문을 하기 위해 단순화했습니다). 다음과 같은 스키마 파일이 있습니다 patternfile.txt.

ALNTPKDHI  
CTDDNALAY  
CTDDNALAYY

및 조회 파일 lookup.txt:

ALNTPKDHI 1  
CTDDNALAY 2  
CTDDNALAYY 3

다음 명령을 실행합니다.

$ grep -w -f patternfile.txt lookupfile.txt

다음을 반환합니다.

ALNTPKDHI 1  
CTDDNALAY 2

세 번째 항목은 일치하는 항목을 반환해야 하지만 일치하는 항목을 반환하지 않습니다. 마지막 두 항목의 순서를 바꾸면 patternfile.txt3개 항목이 모두 반환됩니다.

누구든지 이것을 설명할 수 있나요?

감사합니다!

답변1

재현할 수 없습니다.

$ printf '%s\n' ALNTPKDHI CTDDNALAY CTDDNALAYY > patterns.txt
$ printf '%s\n' 'ALNTPKDHI 1' 'CTDDNALAY 2' 'CTDDNALAYY 3' > input.txt
$ grep -w -f patterns.txt input.txt 
ALNTPKDHI 1
CTDDNALAY 2
CTDDNALAYY 3

패턴이나 입력에 비정상적인 제어 문자나 캐리지 리턴과 같은 공백 문자가 포함되어 있는지 확인하세요.

답변2

스키마 파일의 마지막 줄이 불완전한 경우, 즉 마지막 줄이 줄 바꿈으로 끝나지 않는 경우에만 표시되는 내용을 재현할 수 있습니다. 행이 불완전하면 grep사용되지 않습니다.

파일을 실행하면 od -c마지막 문자가 무엇인지 확인할 수 있습니다. 다음은 마지막 줄의 예입니다.아니요개행 문자로 끝납니다.

$ od -c pattern.txt
0000000    A   L   N   T   P   K   D   H   I  \n   C   T   D   D   N   A
0000020    L   A   Y  \n   C   T   D   D   N   A   L   A   Y
0000035

다음은 파일이 개행 문자로 끝나는 경우의 예입니다.

$ od -c pattern.txt
0000000    A   L   N   T   P   K   D   H   I  \n   C   T   D   D   N   A
0000020    L   A   Y  \n   C   T   D   D   N   A   L   A   Y  \n
0000036

다음 명령을 사용하여 파일에 줄바꿈을 추가할 수 있습니다.

echo >>pattern.txt

대부분의 텍스트 편집기는 처음에 줄 바꿈이 없으면 파일을 저장할 때 텍스트의 마지막 줄에 종료 줄 바꿈을 자동으로 추가합니다.

관련 정보