> 텍스트 처리 및 검색 > join

join: 두 파일의 공통 필드 병합

join 명령어는 두 개의 정렬된 텍스트 파일에서 지정된 공통 필드를 기반으로 라인을 병합하여 표준 출력으로 내보냅니다. 데이터베이스의 JOIN 연산과 유사하게 작동하며, 각 파일의 해당 라인들을 결합하여 새로운 라인을 생성합니다.

개요

join은 두 파일의 특정 필드를 비교하여 일치하는 라인을 결합합니다. 이 명령어는 입력 파일이 공통 필드를 기준으로 정렬되어 있어야 올바르게 작동합니다. 정렬되지 않은 파일에 사용하면 예상치 못한 결과가 나올 수 있습니다.

주요 특징

  • 두 파일의 공통 필드 기반 병합
  • 입력 파일 정렬 필수
  • 다양한 옵션으로 출력 형식 제어
  • 데이터 통합 및 보고서 생성에 유용

주요 옵션

join 명령어는 다양한 옵션을 통해 병합 기준, 출력 형식, 그리고 일치하지 않는 라인 처리 방식을 세밀하게 제어할 수 있습니다.

필드 지정 및 구분자

출력 제어

생성된 명령어:

명령어를 조합해 보세요.

설명:

`join` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

join 명령어의 다양한 활용 예시를 통해 두 파일의 데이터를 효과적으로 병합하는 방법을 알아봅니다.

기본 병합

echo "1 apple\n2 banana" > file1.txt && echo "1 red\n2 yellow" > file2.txt && join file1.txt file2.txt

두 파일의 첫 번째 필드를 기준으로 병합합니다. (파일 생성 후 실행)

특정 필드 병합

echo "apple 1\nbanana 2" > file3.txt && echo "red 1\nyellow 2" > file4.txt && join -j 2 file3.txt file4.txt

두 파일의 두 번째 필드를 기준으로 병합합니다. (파일 생성 후 실행)

탭 구분자 사용

echo -e "id\tname\n1\tAlice\n2\tBob" > users.tsv && echo -e "id\tcity\n1\tSeoul\n3\tParis" > cities.tsv && join -t $'\t' users.tsv cities.tsv

탭으로 구분된 파일들을 병합합니다. (파일 생성 후 실행)

일치하지 않는 라인 포함

echo "1 apple\n2 banana\n3 orange" > file5.txt && echo "1 red\n2 yellow" > file6.txt && join -a 1 file5.txt file6.txt

첫 번째 파일(file5.txt)에만 있는 라인도 출력에 포함합니다. (파일 생성 후 실행)

특정 필드만 출력

echo "1 apple\n2 banana" > file7.txt && echo "1 red\n2 yellow" > file8.txt && join -o 1.1,1.2,2.2 file7.txt file8.txt

첫 번째 파일의 첫 번째, 두 번째 필드와 두 번째 파일의 두 번째 필드만 출력합니다. (파일 생성 후 실행)

팁 & 주의사항

join 명령어를 사용할 때 유용한 팁과 주의해야 할 점들입니다.

중요 팁

  • **입력 파일 정렬**: join 명령어는 입력 파일이 조인 필드를 기준으로 정렬되어 있어야만 올바르게 작동합니다. `sort` 명령어를 사용하여 미리 정렬하는 것이 필수적입니다. 예: `sort file1.txt > sorted_file1.txt`
  • **필드 구분자**: 기본 구분자는 공백(스페이스, 탭)입니다. 다른 구분자를 사용하려면 `-t` 옵션을 사용하세요. 예를 들어, CSV 파일의 경우 `-t ','`를 사용합니다.
  • **출력 형식 제어**: `-o` 옵션을 사용하여 출력될 필드의 순서와 포함 여부를 정밀하게 제어할 수 있습니다. `FILENUM.FIELDNUM` 형식으로 지정합니다 (예: `1.2`는 첫 번째 파일의 두 번째 필드).
  • **일치하지 않는 라인 처리**: `-a` 또는 `-v` 옵션을 사용하여 일치하는 라인뿐만 아니라 일치하지 않는 라인도 포함하거나, 일치하지 않는 라인만 출력할 수 있습니다.

동일 카테고리 명령어