읽기 루프 동안 grep 사용

읽기 루프 동안 grep 사용

행이 많은 csv 파일이 있는데 일치하는 항목을 찾아 파일로 출력해야 합니다. 내 데이터는 다음과 같습니다

파일 1

qwerty
asdfgh
zxcvbn
qwerty
aassdd
zzxxcc
yyuuii
tttttt

다음과 일치해야 합니다.

파일 2

qwert
tttttt
aassdd.

내 파일이 크고 일치 항목 목록이 길기 때문에 다음을 수행합니다.

while read n ; do grep $n File_1.csv >> results.csv ; done < File_2.csv

내가 원하는 결과를 얻을 수 없습니다.

답변1

반복할 필요는 없습니다. 이 -f옵션은 검색할 패턴이 포함된 파일을 사용합니다.

grep -Ff File_2.csv File_1.csv > results.csv

-F검색어가 정규 표현식이 아닌 문자 그대로 처리되도록 옵션 도 추가했습니다 .

답변2

각 파일에 중복 항목이 없으면 다음을 수행할 수 있습니다.

# In file_1 and file_2
sort file_1 file_2 | uniq -d
# In file_1 or file_2 but not both
sort file_1 file_2 | uniq -u
# In file_1 and not file_2
sort file_1 file_2 | uniq -d | sort - file_1 | uniq -u
# In file_2 and not file_1
sort file_1 file_2 | uniq -d | sort - file_2 | uniq -u

답변3

grep유틸리티는 한 파일에서 패턴을 읽고 이를 다른 파일의 내용과 일치시킬 수 있습니다. 쉘에서 반복할 필요가 없습니다.

$ grep -f patterns file

질문에 있는 두 파일(파일 1은 file파일 2는 patterns)을 사용하면 다음이 생성됩니다.

qwerty 
qwerty 
tttttt 

patterns고정 문자열(정규 표현식 아님)의 패턴을 일치시키려면 다음을 추가하세요 -F.

$ grep -F -f patterns file

주어진 예에서 이는 사용하지 않는 것과 동일한 결과를 생성합니다 -F.

전체 줄을 강제로 일치시키려면 다음을 추가하세요 -x.

$ grep -x -F -f patterns file
tttttt   

qwerty이러한 행은 정확히 일치하지 않기 때문에 반환되지 않습니다 qwert.

관련 정보