GREP - 파일의 패턴 일치는 목록의 마지막 패턴만 반환합니다.

GREP - 파일의 패턴 일치는 목록의 마지막 패턴만 반환합니다.

한 줄에 해시 하나씩, 텍스트 파일에 약 2,300만 개의 해시 목록이 있습니다. hashes.txt라고 부르세요. 다른 텍스트 파일(app 40)에 해시 목록이 있는데, 다시 한 줄에 해시가 하나씩 있습니다. 이름을 culls.txt로 지정하세요.

나는 culls.txt의 패턴을 사용하여 역 grep을 수행하려고 합니다. 즉, culls 목록의 어떤 패턴과도 일치하지 않는 모든 줄을 출력하고 싶습니다.

grep -v -F -f culls.txt hashes.txt > Output.txt

무슨 일이 일어나고 있는지는 40개 정도의 목록 중 마지막 해시만 제거되고 있다는 것입니다. 이전 행의 모든 ​​해시가 유지됩니다. 나는 매우 차단되었습니다. 제안? 그리고 그렇습니다. 값은 해시 파일에 있습니다 ;->

답변1

마지막 해시만 인식된다는 사실은 마지막 행을 제외한 모든 행에 줄 끝 문제가 있음을 나타낼 수 있습니다.

다음 파일을 사용하여 내 시스템(Ubuntu 14.04; grep(GNU grep) 2.16)에서 이를 테스트했습니다.

$ cat culls.txt 
h00
h10
h20
h30
h40
$ cat culls2.txt 
h00
h10
h20
h30
h40
$ cat hashes.txt 
h04
h11
h13
h30
h61
h40
h41
h39
h42
$ file culls.txt hashes.txt  culls2.txt
culls.txt:  ASCII text
hashes.txt: ASCII text
culls2.txt: ASCII text, with CRLF line terminators

내가 얻는 출력은 culls.txt예상한 대로입니다( 출력에서 제거됨) h30.h40

$ grep -v -F -f culls.txt hashes.txt
h04
h11
h13
h61
h41
h39
h42

내가 얻는 출력은 culls2.txt여러분이 보는 것과 유사합니다( h40출력에서 제거되었지만 h30여전히 남아 있음).

$ grep -v -F -f culls2.txt hashes.txt
h04
h11
h13
h30
h61
h41
h39
h42

의 마지막 줄에는 줄 끝이 없습니다 culls2.txt.

마지막 줄에 CRLF 줄 종결자를 추가하면 다음과 같은 결과를 얻습니다.

$ grep -v -F -f culls3.txt hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42

이제 출력에서 ​​해시가 제거되지 않습니다.

이는 CRLF 라인 종결자가 문제임을 증명합니다.

관련 정보