다음과 같은 문제가 발생했습니다(질문을 하기 위해 단순화했습니다). 다음과 같은 스키마 파일이 있습니다 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.txt
3개 항목이 모두 반환됩니다.
누구든지 이것을 설명할 수 있나요?
감사합니다!
답변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
대부분의 텍스트 편집기는 처음에 줄 바꿈이 없으면 파일을 저장할 때 텍스트의 마지막 줄에 종료 줄 바꿈을 자동으로 추가합니다.