join과 split 명령어는 서로 다른 파일 처리 문제를 해결합니다. join은 정렬된 텍스트 입력 두 개에서 관련 레코드를 결합하고 split은 하나의 입력을 여러 작은 파일로 나눕니다.
Text-Fu · 레슨 11
join과 split
키를 기준으로 정렬된 텍스트 파일 두 개를 결합하고 한 파일을 이름이 지정된 조각으로 나누는 방법을 배웁니다.
첫 번째 필드로 두 파일 결합하기
기본적으로 join은 정확히 두 입력 파일에서 공백으로 구분된 첫 번째 필드를 비교합니다. 다음은 이미 정렬된 파일입니다.
people.txt:
1 John
2 Jane
3 Mary
surnames.txt:
1 Doe
2 Doe
3 Sue
키 필드가 같은 레코드를 결합합니다.
$ join people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue
출력에는 공유 키가 한 번 나온 뒤 첫 번째와 두 번째 파일의 나머지 필드가 이어집니다. join은 한 번에 파일 두 개를 처리하며 일반 파일 피연산자 세 개를 3방향 관계형 조인으로 받지 않습니다.
필드 옵션이 없을 때 join first.txt second.txt는 어떤 레코드를 결합하나요?
조인 키 정렬하기
각 입력은 호환되는 비교 규칙을 사용하여 조인 필드를 기준으로 정렬되어야 합니다. 기본 필드 1에는 sort -k 1,1로 사본을 준비합니다.
$ LC_ALL=C sort -k 1,1 people-raw.txt > people.txt
$ LC_ALL=C sort -k 1,1 surnames-raw.txt > surnames.txt
$ LC_ALL=C join people.txt surnames.txt
정렬과 조인에 같은 로캘을 사용하면 배열 규칙이 일관되게 유지됩니다. 정렬 결과를 입력 파일 자체로 리디렉션하면 쉘이 먼저 파일을 비우므로 그렇게 하지 마세요.
join으로 안정적으로 일치 항목을 찾으려면 일반적으로 어떤 준비가 필요한가요?
서로 다른 조인 필드 선택하기
첫 번째 파일의 키에는 -1 FIELD, 두 번째 파일의 키에는 -2 FIELD를 사용합니다. 첫 번째 입력이 다음과 같다고 가정합니다.
John 1
Jane 2
Mary 3
두 번째 입력은 다음과 같습니다.
1 Doe
2 Doe
3 Sue
첫 번째 파일을 필드 2로, 두 번째 파일을 필드 1로 정렬한 뒤 실행합니다.
$ join -1 2 -2 1 people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue
:처럼 공백이 아닌 한 문자가 필드를 구분할 때는 -t CHARACTER를 사용합니다. -a 1이나 -a 2 같은 옵션으로 한 입력에서 짝이 없는 줄을 포함할 수 있으며 기본 출력에는 키가 일치하는 항목만 들어갑니다.
첫 번째 파일의 필드 2를 두 번째 파일의 필드 1과 결합하는 옵션은 무엇인가요?
줄 수를 기준으로 나누기
split은 한 입력의 연속된 부분을 별도의 출력 파일에 씁니다. 키 기반 join 작업의 역연산은 아닙니다.
$ split large.txt
GNU의 기본 동작은 출력 파일마다 최대 1000줄을 쓰고 접두사 x를 사용하여 xaa, xab, xac 같은 이름을 만듭니다.
줄 수를 선택하려면 -l NUMBER를 사용하고 출력 접두사를 고르려면 마지막 피연산자를 추가합니다.
$ split -l 500 large.txt part-
각 조각에 최대 500줄이 들어가는 part-aa, part-ab 등이 만들어집니다.
large.txt를 최대 500줄씩, part- 접두사가 붙은 조각으로 나누는 명령어는 무엇인가요?
크기를 기준으로 나누기
바이트 크기를 기준으로 입력을 나누려면 -b SIZE를 사용합니다. GNU에서 이 문맥의 K, M, G 같은 접미사는 1024의 거듭제곱을 나타냅니다.
$ split -b 10M archive.bin chunk-
마지막 조각은 더 작을 수 있으며 그 외에는 10메비바이트 크기의 조각을 요청합니다. split은 아카이브 목록이나 재조립 메타데이터를 만들지 않습니다. 재구성해야 한다면 접미사의 순서를 보존하고 조각들을 순서대로 이어 붙이세요.
archive.bin을 chunk- 접두사를 사용하여 10MiB씩 나누는 명령어는 무엇인가요?
키 조인과 구조화된 데이터 처리를 연습하려면 다음 실습을 진행해 보세요.
- Linux join 명령어: 파일 결합 - 공통 필드를 기준으로 정렬된 텍스트 파일 두 개의 줄을 병합하는 방법을 직접 연습합니다.
- 직원 데이터 처리 -
join과awk같은 명령줄 도구로 여러 출처의 데이터를 결합하고 처리합니다.
레슨 완료
join과 split 완료
이제 정렬된 레코드를 결합하거나 한 입력을 순서가 있는 조각으로 나눌 수 있습니다.
정확히 두 파일을 같은 키 필드로 결합할 수 있습니다.
두 입력을 조인 키 기준으로 일관되게 정렬할 수 있습니다.
-1과-2로 기본값이 아닌 키 필드를 선택할 수 있습니다.-l로 줄 수를 기준으로 나눌 수 있습니다.-b와 명확한 접두사로 바이트 크기를 기준으로 나눌 수 있습니다.