반달가면 이글루에서 백업 - 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
'bash script' 카테고리의 다른 글
[bash: awk] 특정 위치(field)의 문자열에서 특정 길이 만큼 문자열 추출 (substr) (0) | 2023.07.20 |
---|---|
[bash: while, read, <] 텍스트 파일을 한줄씩 읽어서 작업하기 (0) | 2023.07.20 |
[bash: awk] 작업 시작전, 완료후에 실행할 명령어 지정(BEGIN/END) (0) | 2023.07.19 |
[bash: awk] 조건에 따른 문자열 작업 (0) | 2023.07.19 |
[bash: read] read 명령의 요긴한 옵션 몇가지 (0) | 2023.07.19 |