Linux에서 join 명령을 사용하는 방법

공통 필드를 일치시켜 두 텍스트 파일의 데이터를 병합하려면 Linux 조인 명령을 사용할 수 있습니다. 정적 데이터 파일에 역동성을 추가합니다. 사용법을 알려드리겠습니다.

파일 간 데이터 일치

데이터가 왕입니다. 기업, 기업 및 가정에서 모두 실행합니다. 그러나 다른 파일에 저장되고 다른 사람들에 의해 대조되는 데이터는 고통스럽습니다. 원하는 정보를 찾기 위해 어떤 파일을 열어야 하는지 아는 것 외에도 파일의 레이아웃과 형식이 다를 수 있습니다.

또한 업데이트해야 하는 파일, 백업해야 하는 파일, 레거시 파일 및 아카이브할 수 있는 파일에 대한 관리상의 골칫거리를 처리해야 합니다.

또한 데이터를 통합하거나 전체 데이터 세트에 대해 일부 분석을 수행해야 하는 경우 추가 문제가 발생합니다. 필요한 작업을 수행하기 전에 여러 파일에서 데이터를 합리화하는 방법은 무엇입니까? 데이터 준비 단계에 어떻게 접근합니까?

좋은 소식은 파일이 하나 이상의 공통 데이터 요소를 공유하는 경우 Linux 조인 명령이 수렁에서 빠져나올 수 있다는 것입니다.

데이터 파일

조인 명령의 사용을 시연하는 데 사용할 모든 데이터는 다음 두 파일로 시작하는 가상의 데이터입니다.

cat file-1.txt
cat file-2.txt

의 내용

다음은 file-1.txt의 내용입니다.

1 Adore Varian [email protected] Female 192.57.150.231
2 Nancee Merrell [email protected] Female 22.198.121.181
3 Herta Friett [email protected] Female 33.167.32.89
4 Torie Venmore [email protected] Female 251.9.204.115
5 Deni Sealeaf [email protected] Female 210.53.81.212
6 Fidel Bezley [email protected] Male 72.173.218.75
7 Ulrikaumeko Standen [email protected] Female 4.204.0.237
8 Odell Jursch [email protected] Male 1.138.85.117

번호가 매겨진 라인 세트가 있으며 각 라인에는 다음 정보가 모두 포함되어 있습니다.

번호
이름

이메일 주소
그 사람의 성별
IP 주소

다음은 file-2.txt의 내용입니다.

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93
8 Jursch [email protected] Male Hudson Valley $663,821.09

file-2.txt의 각 줄에는 다음 정보가 포함되어 있습니다.

번호

이메일 주소
그 사람의 성별
뉴욕의 한 지역
달러 가치

join 명령은 공백으로 둘러싸인 텍스트 섹션, 줄의 시작 또는 줄의 끝을 의미하는 “필드”와 함께 작동합니다. 조인이 두 파일 사이의 행을 일치시키려면 각 행에 공통 필드가 포함되어야 합니다.

  Excel에서 컬러 셀을 계산하는 방법

따라서 두 파일에 모두 나타나는 경우에만 필드를 일치시킬 수 있습니다. IP 주소는 하나의 파일에만 나타나므로 좋지 않습니다. 이름은 하나의 파일에만 나타나므로 둘 다 사용할 수 없습니다. 성은 두 파일에 모두 있지만 다른 사람들이 동일한 성을 사용하므로 잘못된 선택이 될 것입니다.

데이터가 너무 모호하기 때문에 남성 및 여성 항목과 함께 데이터를 연결할 수 없습니다. 뉴욕 지역과 달러 값도 하나의 파일에만 나타납니다.

그러나 이메일 주소는 두 파일에 모두 있고 각각은 개인에게 고유하기 때문에 사용할 수 있습니다. 파일을 빠르게 살펴봐도 각각의 행이 동일한 사람임을 확인하므로 행 번호를 일치하는 필드로 사용할 수 있습니다(나중에 다른 필드를 사용함).

두 파일에는 서로 다른 수의 필드가 있으므로 문제가 없습니다. 각 파일에서 사용할 필드를 조인할 수 있습니다.

그러나 뉴욕 지역과 같은 필드를 조심하십시오. 공백으로 구분된 파일에서 지역 이름의 각 단어는 필드처럼 보입니다. 일부 지역에는 두 단어 또는 세 단어로 된 이름이 있기 때문에 실제로 동일한 파일 내에 다른 수의 필드가 있습니다. New York 지역 앞에 있는 줄에 나타나는 필드에서 일치하는 한 괜찮습니다.

조인 명령

먼저 일치시킬 필드를 정렬해야 합니다. 두 파일 모두에 오름차순 숫자가 있으므로 해당 기준을 충족합니다. 기본적으로 join은 우리가 원하는 파일의 첫 번째 필드를 사용합니다. 또 다른 합리적인 기본값은 조인에서 필드 구분 기호가 공백일 것으로 예상한다는 것입니다. 다시, 우리는 그것을 얻었으므로 계속해서 조인을 시작할 수 있습니다.

모든 기본값을 사용하므로 명령은 간단합니다.

join file-1.txt file-2.txt

그만큼

join은 명령줄에 나열된 순서에 따라 파일을 “파일 1” 및 “파일 2″로 간주합니다.

출력은 다음과 같습니다.

1 Adore Varian [email protected] Female 192.57.150.231 Varian [email protected] Female Western New York $535,304.73
2 Nancee Merrell [email protected] Female 22.198.121.181 Merrell [email protected] Female Finger Lakes $309,033.10
3 Herta Friett [email protected] Female 33.167.32.89 Friett [email protected] Female Southern Tier $461,664.44
4 Torie Venmore [email protected] Female 251.9.204.115 Venmore [email protected] Female Central New York $175,818.02
5 Deni Sealeaf [email protected] Female 210.53.81.212 Sealeaf [email protected] Female North Country $126,690.15
6 Fidel Bezley [email protected] Male 72.173.218.75 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Ulrikaumeko Standen [email protected] Female 4.204.0.237 Standen [email protected] Female Capital District $674,634.93
8 Odell Jursch [email protected] Male 1.138.85.117 Jursch [email protected] Male Hudson Valley $663,821.09

출력 형식은 다음과 같습니다. 행이 일치하는 필드가 먼저 인쇄되고 그 다음에 파일 1의 다른 필드가 인쇄되고 그 다음 일치 필드가 없는 파일 2의 필드가 인쇄됩니다.

  개인 정보를 공개하지 않고 화면을 공유하는 방법

정렬되지 않은 필드

작동하지 않을 것이라고 알고 있는 것을 시도해 보겠습니다. 조인이 파일을 올바르게 처리할 수 없도록 한 파일에 있는 행을 순서가 맞지 않게 배치합니다. file-3.txt의 내용은 file-2.txt와 같지만 8행은 5행과 6행 사이에 있습니다.

다음은 file-3.txt의 내용입니다.

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
8 Jursch [email protected] Male Hudson Valley $663,821.09
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93

file-3.txt를 file-1.txt에 결합하기 위해 다음 명령을 입력합니다.

join file-1.txt file-3.txt

그만큼

join은 file-3.txt의 일곱 번째 줄이 순서가 잘못되어 처리되지 않는다고 보고합니다. 7행은 올바르게 정렬된 목록에서 8보다 먼저 와야 하는 숫자 6으로 시작하는 줄입니다. 파일의 여섯 번째 줄(“8 Odell”로 시작)이 마지막으로 처리되었으므로 출력을 볼 수 있습니다.

결합이 파일의 정렬 순서에 맞는지 확인하려면 –check-order 옵션을 사용할 수 있습니다. 병합은 시도되지 않습니다.

이렇게 하려면 다음을 입력합니다.

join --check-order file-1.txt file-3.txt

그만큼

join은 file-3.txt 파일의 7행에 문제가 있을 것이라고 미리 알려줍니다.

행이 누락된 파일

file-4.txt에서 마지막 줄이 제거되었으므로 8행이 없습니다. 내용은 다음과 같습니다.

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93

다음을 입력하면 놀랍게도 조인이 불평하지 않고 가능한 모든 줄을 처리합니다.

join file-1.txt file-4.txt

그만큼

출력에는 7개의 병합된 줄이 나열됩니다.

-a(인쇄 불가) 옵션은 결합에 일치하지 않는 행도 인쇄하도록 지시합니다.

여기에 다음 명령을 입력하여 파일 2의 줄과 일치할 수 없는 파일 1의 줄을 인쇄하도록 조인에 지시합니다.

join -a 1 file-1.txt file-4.txt

그만큼

7개의 라인이 일치하고 파일 1의 라인 8이 일치하지 않고 인쇄됩니다. file-4.txt에는 일치시킬 수 있는 8행이 포함되어 있지 않기 때문에 병합된 정보가 없습니다. 그러나 적어도 출력에는 여전히 나타나므로 file-4.txt에 일치하는 항목이 없다는 것을 알 수 있습니다.

다음 -v(결합된 줄 억제) 명령을 입력하여 일치하지 않는 줄을 표시합니다.

join -v file-1.txt file-4.txt

그만큼

파일 2에서 일치하는 항목이 없는 것은 8행뿐입니다.

다른 필드 일치

기본값이 아닌 필드(필드 1)에서 두 개의 새 파일을 일치시키겠습니다. 다음은 file-7.txt의 내용입니다.

[email protected] Female 192.57.150.231
[email protected] Female 210.53.81.212
[email protected] Male 72.173.218.75
[email protected] Female 33.167.32.89
[email protected] Female 22.198.121.181
[email protected] Male 1.138.85.117
[email protected] Female 251.9.204.115
[email protected] Female 4.204.0.237

다음은 file-8.txt의 내용입니다.

Female [email protected] Western New York $535,304.73
Female [email protected] North Country $126,690.15
Male [email protected] Mohawk Valley $366,733.78
Female [email protected] Southern Tier $461,664.44
Female [email protected] Finger Lakes $309,033.10
Male [email protected] Hudson Valley $663,821.09
Female [email protected] Central New York $175,818.02
Female [email protected] Capital District $674,634.93

가입에 사용할 수 있는 유일한 필드는 이메일 주소로, 첫 번째 파일의 필드 1과 두 번째 파일의 필드 2입니다. 이를 수용하기 위해 -1(파일 1 필드) 및 -2(파일 2 필드) 옵션을 사용할 수 있습니다. 각 파일의 어떤 필드를 결합에 사용해야 하는지를 나타내는 숫자를 따라갈 것입니다.

  Linux에 Zoiper를 설치하는 방법

파일 1의 첫 번째 필드와 파일 2의 두 번째 필드를 사용하도록 조인에 지시하기 위해 다음을 입력합니다.

join -1 1 -2 2 file-7.txt file-8.txt

그만큼

파일은 출력에서 ​​각 줄의 첫 번째 필드로 표시되는 이메일 주소에 결합됩니다.

다른 필드 구분 기호 사용

공백이 아닌 다른 것으로 구분된 필드가 있는 파일이 있는 경우에는 어떻게 합니까?

다음 두 파일은 쉼표로 구분됩니다. 공백은 여러 단어로 된 지명 사이에 있습니다.

cat file-5.txt
cat file-6.txt

의 내용

-t(구분 문자)를 사용하여 필드 구분 기호로 사용할 문자를 조인에 알릴 수 있습니다. 이 경우 쉼표이므로 다음 명령을 입력합니다.

join -t, file-5.txt file-6.txt

그만큼

모든 줄이 일치하고 장소 이름에 공백이 유지됩니다.

대소문자 무시

또 다른 파일인 file-9.txt는 file-8.txt와 거의 동일합니다. 유일한 차이점은 아래와 같이 일부 이메일 주소에 대문자가 있다는 것입니다.

Female [email protected] Western New York $535,304.73
Female [email protected] North Country $126,690.15
Male [email protected] Mohawk Valley $366,733.78
Female [email protected] Southern Tier $461,664.44
Female [email protected] Finger Lakes $309,033.10
Male [email protected] Hudson Valley $663,821.09
Female [email protected] Central New York $175,818.02
Female [email protected] Capital District $674,634.93

file-7.txt와 file-8.txt를 결합했을 때 완벽하게 작동했습니다. file-7.txt와 file-9.txt에서 어떤 일이 일어나는지 봅시다.

다음 명령을 입력합니다.

join -1 1 -2 2 file-7.txt file-9.txt

그만큼

우리는 6개의 라인만 일치시켰습니다. 대문자와 소문자의 차이로 인해 다른 두 이메일 주소가 결합되지 않았습니다.

그러나 -i(대소문자 무시) 옵션을 사용하여 조인이 이러한 차이점을 무시하고 대소문자에 관계없이 동일한 텍스트가 포함된 필드를 일치시키도록 할 수 있습니다.

다음 명령을 입력합니다.

join -1 1 -2 2 -i file-7.txt file-9.txt

그만큼

8개의 라인이 모두 일치하고 성공적으로 결합됩니다.

믹스 앤 매치

조인하면 어색한 데이터 준비와 씨름할 때 강력한 동맹이 있습니다. 데이터를 분석해야 하거나 다른 시스템으로 가져오기를 수행하기 위해 데이터를 형태로 마사지하려고 할 수 있습니다.

상황이 어떻든, 당신은 당신의 코너에 합류하게 되어 기쁠 것입니다!