bash script2023. 7. 19. 17:33

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/590105

 

파일 2개를 비교해서 양쪽 파일에 공통적으로 출현하는 문자열을 찾는 방법이다. grep의 -f 옵션을 사용하면 된다. -f 옵션은 검색할 문자열을 파일로부터 한줄씩 읽어들이기 위한 것이다.

예를 들어 a.txt 파일에 있는 문자열 중에 b.txt에도 있는지 알고 싶다면, 아래와 같이 해 볼 수 있다.

# a.txt 파일로부터 문자열 패턴을 읽어서 b.txt에서 검색 (-f 옵션)
grep -f a.txt b.txt

한가지 생각해 볼 점은, a.txt와 b.txt에 빈 줄이 많이 존재할 경우 이것도 전부 문자열로 간주해서 비교하기 때문에 빈 줄도 일치하는 것으로 결과가 나와서 보기에 지저분할 수 있다. 위의 예시를 좀 더 깔끔하게 작업하려면 a.txt 파일에서 빈 줄을 제거하고 중복되는 문자열도 제거하면 되겠다. 빈 줄 제거는 grep에서 공백이 아닌 캐럭터 전체를 검색하고, 중복 제거는 sort의 -u 옵션을 이용하자. sort에 대한 내용은 이전 게시물을 참고하자. 여기로

 

a.txt 파일에서 빈 줄과 중복되는 행을 제거하여 a.txt.tmp 파일을 만든 후, 이 파일을 이용해서 b.txt에 대한 검색을 실행하면 된다.

# 빈 줄과 중복 제거
grep "[[:graph:]]" a.txt | sort -u > a.txt.tmp

# b.txt에 대한 검색
grep -f a.txt.tmp b.txt
 
만약 행 전체가 정확하게 일치하는 부분만 찾고 싶다면 grep에 -x 옵션을 추가하면 되겠다.

# 행 전체 일치 (-x 옵션)
grep -x -f a.txt.tmp b.txt

728x90
Posted by 반달가면