개요
comm은 'common'의 약자로, 두 개의 이미 정렬된 파일 간의 줄을 비교하는 데 특화된 명령어입니다. 파일 내용을 병렬로 비교하고, 그 결과를 세 개의 열로 구분하여 보여줍니다. 첫 번째 열은 첫 번째 파일에만 있는 줄, 두 번째 열은 두 번째 파일에만 있는 줄, 세 번째 열은 두 파일 모두에 있는 공통된 줄을 나타냅니다. 이 명령어는 특히 데이터베이스 목록이나 사용자 ID 목록 같은 정렬된 텍스트 데이터를 비교할 때 매우 강력합니다.
주요 특징
comm 명령어의 주요 특징은 다음과 같습니다.
- 두 개의 정렬된 파일을 비교하는 데 사용됩니다. (파일이 정렬되지 않은 경우 `sort` 명령을 먼저 사용해야 합니다.)
- 비교 결과를 세 개의 열로 깔끔하게 구분하여 출력합니다.
- 텍스트 데이터의 공통점과 차이점을 한눈에 파악하기 용이합니다.
- 출력 열을 선택적으로 숨기는 기능이 있어 다양한 용도로 활용 가능합니다.
comm vs diff
comm과 diff는 모두 파일 비교 도구지만, 작동 방식과 목적에 차이가 있습니다.
- comm: 정렬된 파일에 특화되어 있으며, 공통된 줄과 고유한 줄을 세 열로 출력합니다. 변경 사항(줄 내용의 수정)은 감지하지 못합니다.
- diff: 정렬되지 않은 파일도 비교할 수 있으며, 줄 단위의 모든 변경 사항(추가, 삭제, 수정)을 상세히 출력합니다.
주요 옵션
comm 명령어의 옵션은 주로 특정 열을 숨기는 데 사용됩니다.
1) 출력 열 제어
2) 도움말
생성된 명령어:
명령어를 조합해 보세요.
설명:
`comm` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
comm 명령어의 다양한 사용 예시를 통해 기능을 익혀보세요.
두 파일의 공통 및 고유한 줄 비교
comm file1.txt file2.txt
정렬된 두 파일의 내용을 세 개의 열로 비교합니다.
두 파일에 공통으로 있는 줄만 출력
comm -12 file1.txt file2.txt
`-1`과 `-2` 옵션을 사용하여 첫 번째와 두 번째 파일에만 있는 줄을 숨기고, 공통된 줄만 출력합니다.
두 파일의 고유한 줄만 출력
comm -3 file1.txt file2.txt
`-3` 옵션을 사용하여 공통된 줄을 숨기고, 각 파일에 고유하게 있는 줄만 출력합니다.
정렬되지 않은 파일 비교
comm <(sort file1.txt) <(sort file2.txt)
`sort` 명령어를 파이프(`|`)를 통해 `comm`과 함께 사용하여 정렬되지 않은 파일도 비교할 수 있습니다.
설치
comm은 대부분의 리눅스 배포판에 `coreutils` 패키지의 일부로 기본 포함되어 있습니다. 별도의 설치가 필요하지 않습니다.
팁 & 주의사항
comm 명령어 사용 시 유의할 점들을 정리했습니다.
팁
- comm을 사용하기 전에 **반드시 파일의 내용을 정렬해야 합니다.** 파일이 정렬되지 않으면 올바른 비교 결과를 얻을 수 없습니다.
- 파일이 정렬되었는지 확인하려면 `comm file1.txt file2.txt`를 실행했을 때 출력이 예상과 다른지 확인하거나, `sort` 명령을 통해 파일을 정렬한 후 다시 비교해보면 됩니다.
- `<(...)` 문법은 프로세스 치환(process substitution)으로, `sort` 명령의 결과를 임시 파일처럼 `comm`에 전달하는 역할을 합니다. 이 방법은 정렬되지 않은 파일도 간편하게 비교할 수 있게 해줍니다.