Linux / 명령어 / comm - 정렬된 두 파일의 공통·고유 행 비교

comm은 정렬된 두 파일을 행 단위로 비교하여 첫 파일만의 행, 둘째 파일만의 행, 공통 행을 세 열로 보여 줍니다.

comm 명령어란?

기본 출력의 두 번째·세 번째 열 앞에는 탭이 붙습니다. 필요한 열만 남기려면 -1, -2, -3으로 해당 열을 숨깁니다. 텍스트의 위치별 변경을 보려는 목적이라면 diff가 더 적합합니다.

기본 문법

comm [옵션] 정렬된파일1 정렬된파일2

설치된 구현과 옵션은 배포판에 따라 다를 수 있습니다. man comm으로 현재 시스템의 설명을 확인하세요.

사용 예제

세 종류의 행 보기

양쪽 파일을 동일한 기준으로 정렬한 후 비교합니다.

comm old.sorted new.sorted

공통 행만 출력

첫 번째와 두 번째 열을 숨겨 세 번째 공통 열만 남깁니다.

comm -12 old.sorted new.sorted

둘째 파일에만 있는 행

첫 번째와 공통 열을 숨깁니다.

comm -13 old.sorted new.sorted

세 열과 공통 행 읽기

comm은 첫 번째 파일에만 있는 행, 두 번째 파일에만 있는 행, 두 파일에 공통인 행을 열로 구분합니다. -12는 앞의 두 열을 숨겨 공통 행만 남깁니다.

printf 'apple\nbanana\n' > first.txt
printf 'banana\ncherry\n' > second.txt
comm -12 first.txt second.txt

예시 출력:

banana

두 파일은 같은 로케일에서 미리 정렬되어 있어야 합니다. 정렬되지 않은 입력은 열의 의미를 신뢰하기 어렵습니다. comm은 행의 존재 여부를 비교하고, diff는 줄 위치를 포함한 변경 내용을 보여준다는 차이도 기억하세요.

주요 옵션과 형식

옵션·형식 설명
-1 첫 파일에만 있는 행의 열을 숨깁니다.
-2 둘째 파일에만 있는 행의 열을 숨깁니다.
-3 두 파일에 공통인 행의 열을 숨깁니다.
--check-order GNU 구현에서 정렬 순서를 검사합니다.

사용할 때 주의할 점

입력 파일을 같은 로케일로 정렬하세요. 예를 들어 LC_ALL=C sort로 만든 파일은 비교도 같은 로케일에서 수행합니다. comm은 집합의 키별 수량 비교가 아니라 정렬된 행의 비교이므로 중복 행의 의미를 미리 결정해야 합니다.

자주 묻는 질문

comm 결과의 열은 무엇을 뜻하나요?

첫 열은 파일1에만, 둘째 열은 파일2에만, 셋째 열은 두 파일에 공통인 행입니다.

공식 문서

옵션의 정확한 동작과 구현별 차이는 comm 관련 공식 문서에서 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

Linux find 명령어로 경로, 이름, 종류, 크기, 시간과 권한 조건을 조합해 파일을 찾는 방법을 설명합니다. 안전한 exec 사용과 삭제 전 검증도 다룹니다.

Linux / 명령어 / dnf - RPM 계열에서 패키지·저장소 관리

Linux / 명령어 / dnf - RPM 계열에서 패키지·저장소 관리

Linux dnf 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / dmesg - 커널 메시지와 부팅 로그 확인

Linux / 명령어 / dmesg - 커널 메시지와 부팅 로그 확인

Linux dmesg 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux 강좌 / 터미널과 셸 시작하기 - 명령어 구조와 도움말 읽기

Linux 강좌 / 터미널과 셸 시작하기 - 명령어 구조와 도움말 읽기

터미널과 셸의 차이부터 명령어·옵션·인수의 구조, 실행 결과 읽기, Bash 도움말 찾기까지 실습으로 익힙니다.

Linux / 명령어 / cp - 파일과 디렉터리 복사

Linux / 명령어 / cp - 파일과 디렉터리 복사

Linux cp 명령어로 파일과 디렉터리를 복사하는 방법을 설명합니다. 덮어쓰기 제어, 속성 보존, 심볼릭 링크, 희소 파일과 안전한 복사 옵션을 함께 정리합니다.

Linux / 리눅스 디렉토리 구조와 주요 디렉토리별 용도

Linux / 리눅스 디렉토리 구조와 주요 디렉토리별 용도

리눅스의 /etc, /var, /usr, /home, /proc, /dev 등 주요 디렉토리별 용도와 이름의 의미를 정리합니다. 리눅스 파일시스템 구조를 처음 배우거나 서버 관리에 필요한 디렉토리를 확인할 때 참고할 수 있습니다.

Linux / 명령어 / parted - 파티션 표와 빈 공간 확인·관리

Linux / 명령어 / parted - 파티션 표와 빈 공간 확인·관리

Linux parted 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / pgrep - 조건에 맞는 프로세스 ID 검색

Linux / 명령어 / pgrep - 조건에 맞는 프로세스 ID 검색

Linux pgrep 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

diff와 cmp로 두 파일의 차이를 확인하고 unified diff를 읽는 법을 익힙니다. 내용이 다른 경우와 명령 실행 오류의 종료 상태도 구별합니다.

Linux / 명령어 / tracepath - 네트워크 경로와 경로 MTU 확인

Linux / 명령어 / tracepath - 네트워크 경로와 경로 MTU 확인

Linux tracepath 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.