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 / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

Linux / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

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

Linux / 명령어 / mktemp - 안전한 임시 파일과 디렉터리 생성

Linux / 명령어 / mktemp - 안전한 임시 파일과 디렉터리 생성

Linux mktemp 명령어로 예측하기 어려운 이름의 임시 파일과 디렉터리를 안전하게 만드는 방법을 설명합니다. 템플릿, TMPDIR, trap을 이용한 정리와 -u 옵션의 위험도 알아봅니다.

Linux / 명령어 / chgrp - 파일 소유 그룹 변경

Linux / 명령어 / chgrp - 파일 소유 그룹 변경

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

Linux / 명령어 / dig - DNS 레코드와 응답 자세히 조회

Linux / 명령어 / dig - DNS 레코드와 응답 자세히 조회

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

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux whereis 명령어로 프로그램의 바이너리, 소스와 매뉴얼 페이지 위치를 찾는 방법을 설명합니다. 검색 범위 제한과 which·find와의 차이도 정리합니다.

Linux / 명령어 / nc - TCP·UDP 연결과 포트 점검

Linux / 명령어 / nc - TCP·UDP 연결과 포트 점검

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

Linux / 명령어 / clear - 터미널 화면 정리

Linux / 명령어 / clear - 터미널 화면 정리

Linux clear 명령어로 터미널 화면을 정리하는 방법을 설명합니다. 스크롤백을 보존하는 -x 옵션과 Ctrl+L·reset·tput의 차이, TERM 오류 해결법을 다룹니다.

Linux 강좌 / 텍스트 검색과 가공 - grep, sort, uniq, cut, wc

Linux 강좌 / 텍스트 검색과 가공 - grep, sort, uniq, cut, wc

grep, sort, uniq, cut, wc로 텍스트를 찾고 정렬·중복 제거·필드 추출·개수 세기를 실습합니다. 명령 결과와 흔한 해석 오류도 설명합니다.

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

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

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

Linux / 명령어 / gunzip - gzip 압축 파일 풀기

Linux / 명령어 / gunzip - gzip 압축 파일 풀기

Linux gunzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.