리눅스 환경에서 text 파일 비교 후 중복 text 찾기


리눅스 환경에서 text 파일 혹은 임의의 파일를 비교 하여 중복인 text나 key 값 등을 뽑아 내고 싶을때가 있습니다. 엄청난 크기의 파일이 아니라면 간단한 리눅스 명령어로 찾을 수 있습니다

파일 갯수는 제한이 없으며 비교 대상의 파일이 같은 형식으로 이루어져 있어야 합니다

간단하게 설명을 드리자면 1.txt 파일에는 아래와 같이 되어 있고

12354512
12311344
12354123
12341234

2.txt 파일에는 아래와 같이 되어 있으면 중복으로 들어가 있는 “12354123” 을 찾을 수 있는 방법입니다.

444444
333333
12354123
8888888

text 파일에서 중복 찾기 방법

1 . 비교를 원하는 파일을 한개의 파일에 담습니다 (diff.txt 파일에 1.txt 과 2.txt 에서 출력된 내용이 다 들어가게 됩니다)

$ more 1.txt >> diff.txt
$ more 2.txt >> diff.txt   

2 . 중복인 text를 중복 횟수가 많은 순으로 출력

$ sort diff.txt | uniq -c | sort -r -k1
# 출력 sample
4 991569114
3 991741226
2 992385238

3 . 중복인 text를 중복 횟수가 많은 순으로 result.txt 기록

$ sort diff.txt | uniq -c | sort -r -k1 >> result.txt

4 . 중복된 text만 추출 (중복횟수 X)

$ sort diff.txt | uniq -d

sort 명령어 옵션

옵션 설명
-n 라인의 각 필드를 비교하는 대상을 숫자로 한정
-f 영어를 정렬할때 대소문자 구별 안함
-r 출력 순서를 역순으로
-b 앞에 붙는 공백 무시
-t 필드 구분자 지정
-m 정렬된 파일을 병합
-u 정렬 후 중복행 제거
-o 저장할 파일명을 명시, 명시하지 않으면 화면에 출력

uniq 명령어 옵션

옵션 설명
-c 같은 라인이 몇번 나오는지를 표시
-d 중복되어 나오는 라인 중 한 라인만 표시
-D 중복되는 모든 라인을 보여준다
-N 필터링은 무시할 라인을 정한다 (시작 라인부터 N 번째 라인까지는 검사하지 않는다)
-i 중복 라인을 한라인으로 생각하고 출력한다
-u 중복 라인이 없는 것만 보여준다
-w N 번째 문자까지만 비교대상으로 하여 uniq 명령을 수행
-s N 번째 문자까지만 비교대상에서 제외하고 uniq 명령을 수행
-f N 번째 필드를 비교대상에서 제외하고 uniq 명령을 수행