Linux / 명령어 / join - 공통 필드로 두 파일 결합

join은 두 텍스트 파일에서 같은 키 값을 가진 행을 한 행으로 결합합니다. 행 번호가 아니라 필드 값으로 연결한다는 점이 paste와 다릅니다.

join 명령어란?

기본적으로 각 파일의 첫 필드를 키로 사용하고, 두 파일 모두 해당 키로 정렬되어 있어야 합니다. 일치한 행만 출력하는 것이 기본 동작입니다. 누락된 키까지 확인하려면 -a 또는 -v를 검토하세요.

기본 문법

join [옵션] 파일1 파일2

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

사용 예제

첫 필드로 결합

두 파일을 같은 규칙으로 정렬한 뒤 결합합니다.

join names.sorted scores.sorted

구분자 지정

콜론 구분 파일은 두 입력 모두 같은 구분 체계를 사용해야 합니다.

join -t ':' users.sorted roles.sorted

첫 파일의 미일치 행 표시

매칭되지 않은 행도 보고 싶으면 -a 1을 추가합니다.

join -a 1 names.sorted scores.sorted

공통 필드로 결합한 결과

join은 기본적으로 각 파일의 첫 번째 필드가 같은 행을 합칩니다. 다음 파일은 결합 키인 첫 열을 기준으로 미리 정렬되어 있습니다.

printf 'a Ana\nb Bob\n' > names.txt
printf 'a 7\nb 12\n' > ages.txt
join names.txt ages.txt

예시 출력:

a Ana 7
b Bob 12

입력 파일은 같은 로케일과 같은 키 기준으로 정렬해야 합니다. 일치하지 않는 행은 기본 출력에서 빠지므로, 누락된 키도 확인하려면 -a 1 또는 -a 2를 검토하세요. 예제의 두 파일은 현재 디렉터리에 생성되므로 작업이 끝나면 필요 여부를 확인하고 정리합니다.

주요 옵션과 형식

옵션·형식 설명
-t 문자 입력·출력 필드 구분 문자를 지정합니다.
-1 N / -2 N 첫째·둘째 파일의 결합 키 필드를 지정합니다.
-a 1 또는 -a 2 지정 파일에서 일치하지 않는 행도 출력합니다.
-v 1 또는 -v 2 지정 파일에서 일치하지 않는 행만 출력합니다.
-o 형식 출력 필드와 순서를 지정합니다.

사용할 때 주의할 점

두 파일을 동일한 키·구분자·로케일 기준으로 정렬해야 합니다. 정렬되지 않은 입력은 누락되거나 잘못 결합될 수 있습니다. 키가 중복되면 하나의 키에서 여러 출력 행이 생길 수 있어 결과 수를 확인하세요.

자주 묻는 질문

정렬하지 않은 파일을 바로 join할 수 있나요?

일반적인 join 작업은 양쪽 파일이 결합 필드 기준으로 정렬돼 있어야 합니다. 정렬 순서와 로케일을 맞춘 사본을 만든 뒤 실행하세요.

공식 문서

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

같은 카테고리의 다른 글
Linux / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

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

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

Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

Linux truncate 명령어로 파일 크기를 지정하거나 늘리고 줄이는 방법을 설명합니다. 희소 파일, 상대 크기 조정, 기준 파일과 같은 크기로 맞추는 방법 및 데이터 손실 주의점을 알아봅니다.

Linux / 명령어 / sftp - SSH로 안전하게 파일 전송

Linux / 명령어 / sftp - SSH로 안전하게 파일 전송

Linux sftp 명령어로 SSH 기반 파일을 업로드하고 다운로드하는 방법을 설명합니다. 경로 구분, 전송 재개, 공개 키 인증, 배치 자동화와 보안 점검 사항을 정리합니다.

Linux / 명령어 / mount - 파일 시스템 연결 상태 확인과 마운트

Linux / 명령어 / mount - 파일 시스템 연결 상태 확인과 마운트

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

Linux / 명령어 / nslookup - DNS 이름과 레코드 조회

Linux / 명령어 / nslookup - DNS 이름과 레코드 조회

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

Linux / 명령어 / csplit - 행 번호·패턴에서 파일 분할

Linux / 명령어 / csplit - 행 번호·패턴에서 파일 분할

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

Linux / 명령어 / uptime - 시스템 가동 시간과 부하 확인

Linux / 명령어 / uptime - 시스템 가동 시간과 부하 확인

Linux uptime 명령어의 가동 시간과 1분·5분·15분 평균 부하를 읽는 방법을 설명합니다. CPU 개수, I/O 대기와 함께 부하를 진단하는 순서도 정리합니다.

Linux 강좌 / 하드 링크와 심볼릭 링크 이해하기 - 차이와 생성 실습

Linux 강좌 / 하드 링크와 심볼릭 링크 이해하기 - 차이와 생성 실습

하드 링크와 심볼릭 링크의 구조적 차이를 inode와 경로로 설명하고, 링크를 직접 만들어 이름 변경 후 동작까지 확인합니다.

Linux / 명령어 / apt - Debian·Ubuntu에서 패키지 검색·설치·업데이트

Linux / 명령어 / apt - Debian·Ubuntu에서 패키지 검색·설치·업데이트

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

Linux / 명령어 / unxz - xz 압축 파일 풀기

Linux / 명령어 / unxz - xz 압축 파일 풀기

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