
공통 필드를 일치시켜 두 텍스트 파일의 데이터를 병합하려는 경우 Linux를 사용할 수 있습니다 join 명령. 정적 데이터 파일에 역 동성을 뿌립니다. 사용법을 알려 드리겠습니다.
파일 간 데이터 일치
데이터는 왕입니다. 기업, 기업 및 가정이 모두 그 위에 달려 있습니다. 그러나 다른 파일에 저장되고 다른 사람들이 수집 한 데이터는 고통입니다. 원하는 정보를 찾기 위해 열 파일을 아는 것 외에도 파일의 레이아웃과 형식이 다를 수 있습니다.
또한 업데이트해야 할 파일, 백업해야하는 파일, 레거시 파일 및 보관할 수있는 관리 문제를 해결해야합니다.
또한 데이터를 통합하거나 전체 데이터 세트에서 일부 분석을 수행해야하는 경우 추가 문제가 있습니다. 필요한 작업을 수행하기 전에 다른 파일의 데이터를 어떻게 합리화합니까? 데이터 준비 단계에 어떻게 접근합니까?
좋은 소식은 파일이 하나 이상의 공통 데이터 요소 인 Linux를 공유하면 join 명령은 당신을 안개로부터 끌어낼 수 있습니다.
데이터 파일
우리가 사용하는 방법을 보여주기 위해 사용할 모든 데이터 join 다음 두 파일로 시작하는 명령은 허구입니다.
cat file-1.txt
cat file-2.txt

다음은 내용입니다 file-1.txt:
1 Adore Varian avarian0@newyorker.com Female 192.57.150.231 2 Nancee Merrell nmerrell1@ted.com Female 22.198.121.181 3 Herta Friett hfriett2@dagondesign.com Female 33.167.32.89 4 Torie Venmore tvenmore3@gmpg.org Female 251.9.204.115 5 Deni Sealeaf dsealeaf4@nps.gov Female 210.53.81.212 6 Fidel Bezley fbezley5@lulu.com Male 72.173.218.75 7 Ulrikaumeko Standen ustanden6@geocities.jp Female 4.204.0.237 8 Odell Jursch ojursch7@utexas.edu Male 1.138.85.117
번호가 매겨진 행 세트가 있으며 각 행에는 다음 정보가 모두 포함됩니다.
- 숫자
- 이름
- 성
- 이메일 주소
- 그 사람의 섹스
- IP 주소
다음은 내용입니다 file-2.txt:
1 Varian avarian0@newyorker.com Female Western New York $535,304.73 2 Merrell nmerrell1@ted.com Female Finger Lakes $309,033.10 3 Friett hfriett2@dagondesign.com Female Southern Tier $461,664.44 4 Venmore tvenmore3@gmpg.org Female Central New York $175,818.02 5 Sealeaf dsealeaf4@nps.gov Female North Country $126,690.15 6 Bezley fbezley5@lulu.com Male Mohawk Valley $366,733.78 7 Standen ustanden6@geocities.jp Female Capital District $674,634.93 8 Jursch ojursch7@utexas.edu Male Hudson Valley $663,821.09
각 줄 file-2.txt 다음 정보가 포함되어 있습니다.
- 숫자
- 성
- 이메일 주소
- 그 사람의 섹스
- 뉴욕의 지역
- 달러 가치
그만큼 join 명령은 “필드”와 함께 작동하는데,이 문맥에서 공백으로 둘러싸인 텍스트 섹션, 줄의 시작 또는 줄의 끝을 의미합니다. 에 대한 join 두 파일 사이의 행을 일치 시키려면 각 행에 공통 필드가 있어야합니다.
따라서 두 파일에 모두 표시되는 필드 만 일치시킬 수 있습니다. IP 주소는 하나의 파일에만 표시되므로 좋지 않습니다. 이름은 하나의 파일에만 표시되므로이 이름도 사용할 수 없습니다. 성은 두 파일 모두에 있지만 다른 사람들이 같은 성을 가지고 있기 때문에 좋지 않은 선택입니다.
데이터가 너무 모호하여 남성 및 여성 항목과 함께 연결할 수 없습니다. 뉴욕 지역과 달러 가치는 하나의 파일에만 나타납니다.
그러나 이메일 주소는 두 파일에 모두 존재하며 개인마다 고유하므로 이메일 주소를 사용할 수 있습니다. 파일을 빠르게 살펴보면 각 줄의 줄이 같은 사람과 일치하는지 확인하므로 줄 번호를 필드로 사용하여 일치시킬 수 있습니다 (나중에 다른 필드를 사용합니다).
두 파일에는 서로 다른 수의 필드가 있습니다. 알 수 있습니다. join 각 파일에서 사용할 필드
그러나 뉴욕 지역과 같은 분야를주의하십시오. 공백으로 구분 된 파일에서 영역 이름의 각 단어는 필드처럼 보입니다. 일부 지역에는 두 단어 또는 세 단어로 된 이름이 있기 때문에 실제로 동일한 파일 내에 다른 수의 필드가 있습니다. 뉴욕 지역 앞 줄에 나타나는 필드에서 일치하는 한 괜찮습니다.
결합 명령
먼저 일치시킬 필드를 정렬해야합니다. 두 파일 모두에 오름차순 숫자가 있으므로 해당 기준을 충족합니다. 기본적으로, join 파일에서 첫 번째 필드를 사용합니다. 이것이 우리가 원하는 것입니다. 또 다른 합리적인 기본값은 join 필드 구분 기호는 공백이어야합니다. 다시 한 번 우리는 그것을 얻었습니다. join.
모든 기본값을 사용하므로 명령은 간단합니다.
join file-1.txt file-2.txt

join 명령 줄에 나열된 순서에 따라 파일을 “파일 1″및 “파일 2″로 간주합니다.
출력은 다음과 같습니다.
1 Adore Varian avarian0@newyorker.com Female 192.57.150.231 Varian avarian0@newyorker.com Female Western New York $535,304.73 2 Nancee Merrell nmerrell1@ted.com Female 22.198.121.181 Merrell nmerrell1@ted.com Female Finger Lakes $309,033.10 3 Herta Friett hfriett2@dagondesign.com Female 33.167.32.89 Friett hfriett2@dagondesign.com Female Southern Tier $461,664.44 4 Torie Venmore tvenmore3@gmpg.org Female 251.9.204.115 Venmore tvenmore3@gmpg.org Female Central New York $175,818.02 5 Deni Sealeaf dsealeaf4@nps.gov Female 210.53.81.212 Sealeaf dsealeaf4@nps.gov Female North Country $126,690.15 6 Fidel Bezley fbezley5@lulu.com Male 72.173.218.75 Bezley fbezley5@lulu.com Male Mohawk Valley $366,733.78 7 Ulrikaumeko Standen ustanden6@geocities.jp Female 4.204.0.237 Standen ustanden6@geocities.jp Female Capital District $674,634.93 8 Odell Jursch ojursch7@utexas.edu Male 1.138.85.117 Jursch ojursch7@utexas.edu Male Hudson Valley $663,821.09
출력 형식은 다음과 같습니다. 행이 일치하는 필드가 먼저 인쇄되고 파일 1의 다른 필드가 인쇄되고 일치 필드가없는 파일 2의 필드가 인쇄됩니다.
분류되지 않은 필드
제대로 작동하지 않는 것을 시도해 봅시다. 한 줄에 한 줄을 순서대로 넣습니다. join 파일을 올바르게 처리 할 수 없습니다. 내용 file-3.txt ~와 같다 file-2.txt그러나 8 행은 5 행과 6 행 사이에 있습니다.
다음은 내용입니다 file-3.txt:
1 Varian avarian0@newyorker.com Female Western New York $535,304.73 2 Merrell nmerrell1@ted.com Female Finger Lakes $309,033.10 3 Friett hfriett2@dagondesign.com Female Southern Tier $461,664.44 4 Venmore tvenmore3@gmpg.org Female Central New York $175,818.02 5 Sealeaf dsealeaf4@nps.gov Female North Country $126,690.15 8 Jursch ojursch7@utexas.edu Male Hudson Valley $663,821.09 6 Bezley fbezley5@lulu.com Male Mohawk Valley $366,733.78 7 Standen ustanden6@geocities.jp Female Capital District $674,634.93
우리는 가입을 시도하기 위해 다음 명령을 입력 file-3.txt에 file-1.txt:
join file-1.txt file-3.txt

join 일곱 번째 줄에 file-3.txt 순서가 잘못되어 처리되지 않았습니다. 7 행은 6 번으로 시작하는 행으로, 올바르게 정렬 된 목록에서 8 번 앞에옵니다. 파일의 6 번째 줄 ( “8 Odell”로 시작)은 마지막으로 처리 된 것이므로 출력을 볼 수 있습니다.
당신은 사용할 수 있습니다 --check-order 당신이 여부를보고 싶다면 옵션 join 파일의 정렬 순서에 만족합니다. 병합을 시도하지 않습니다.
이렇게하려면 다음을 입력하십시오.
join --check-order file-1.txt file-3.txt

join 파일의 일곱 번째 줄에 문제가있을 것이라고 미리 알려줍니다 file-3.txt.
줄이없는 파일
에 file-4.txt, 마지막 행이 삭제되었으므로 8 행이 없습니다. 내용은 다음과 같습니다.
1 Varian avarian0@newyorker.com Female Western New York $535,304.73 2 Merrell nmerrell1@ted.com Female Finger Lakes $309,033.10 3 Friett hfriett2@dagondesign.com Female Southern Tier $461,664.44 4 Venmore tvenmore3@gmpg.org Female Central New York $175,818.02 5 Sealeaf dsealeaf4@nps.gov Female North Country $126,690.15 6 Bezley fbezley5@lulu.com Male Mohawk Valley $366,733.78 7 Standen ustanden6@geocities.jp Female Capital District $674,634.93
우리는 다음을 입력하고 놀랍게도 join 모든 라인에 불만을 제기하고 처리하지 않습니다.
join file-1.txt file-4.txt

출력은 7 개의 병합 된 라인을 나열합니다.
그만큼 -a (페어링 할 수없는 인쇄) 옵션이 알려줍니다 join 일치하지 않는 줄을 인쇄 할 수도 있습니다.
여기에 다음 명령을 입력하여 알려줍니다 join 파일 1에서 줄 2와 일치 할 수없는 행을 인쇄하려면 다음을 수행하십시오.
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

우리는 8 행이 파일 2에서 일치하지 않는 유일한 것임을 알 수 있습니다.
다른 필드와 일치
기본값이 아닌 필드 (필드 1)에서 두 개의 새 파일을 일치시킵니다. 다음은 file-7.txt의 내용입니다.
avarian0@newyorker.com Female 192.57.150.231 dsealeaf4@nps.gov Female 210.53.81.212 fbezley5@lulu.com Male 72.173.218.75 hfriett2@dagondesign.com Female 33.167.32.89 nmerrell1@ted.com Female 22.198.121.181 ojursch7@utexas.edu Male 1.138.85.117 tvenmore3@gmpg.org Female 251.9.204.115 ustanden6@geocities.jp Female 4.204.0.237
그리고 다음은 file-8.txt의 내용입니다 :
Female avarian0@newyorker.com Western New York $535,304.73 Female dsealeaf4@nps.gov North Country $126,690.15 Male fbezley5@lulu.com Mohawk Valley $366,733.78 Female hfriett2@dagondesign.com Southern Tier $461,664.44 Female nmerrell1@ted.com Finger Lakes $309,033.10 Male ojursch7@utexas.edu Hudson Valley $663,821.09 Female tvenmore3@gmpg.org Central New York $175,818.02 Female ustanden6@geocities.jp Capital District $674,634.93
가입에 사용할 수있는 유일한 필드는 이메일 주소입니다. 첫 번째 파일의 필드 1과 두 번째 파일의 필드 2입니다. 이를 수용하기 위해 -1 (하나의 필드를 제출하십시오) -2 (파일 두 필드) 옵션. 각 파일에서 결합에 사용해야하는 필드를 나타내는 숫자와 함께이 번호를 따릅니다.
우리는 다음을 입력하여 알려줍니다 join 파일 1의 첫 번째 필드와 파일 2의 두 번째 필드를 사용하려면 다음을 수행하십시오.
join -1 1 -2 2 file-7.txt file-8.txt

파일은 전자 메일 주소로 결합되며 출력의 각 줄의 첫 번째 필드로 표시됩니다.
다른 필드 구분 기호 사용
공백이 아닌 다른 필드로 구분 된 파일이있는 경우 어떻게합니까?
다음 두 파일은 쉼표로 구분됩니다. 공백은 여러 단어로 된 장소 이름 사이에 있습니다.
cat file-5.txt
cat file-6.txt

우리는 사용할 수 있습니다 -t 말할 (분리 문자) join 필드 구분자로 사용할 문자 이 경우 쉼표이므로 다음 명령을 입력하십시오.
join -t, file-5.txt file-6.txt

모든 줄이 일치하고 장소 이름에 공백이 유지됩니다.
레터 케이스 무시
다른 파일 file-9.txt, 거의 동일합니다 file-8.txt. 유일한 차이점은 다음과 같이 일부 이메일 주소에 대문자가 있다는 것입니다.
Female avarian0@newyorker.com Western New York $535,304.73 Female dsealeaf4@nps.gov North Country $126,690.15 Male Fbezley5@lulu.com Mohawk Valley $366,733.78 Female hfriett2@dagondesign.com Southern Tier $461,664.44 Female nmerrell1@ted.com Finger Lakes $309,033.10 Male Ojursch7@utexas.edu Hudson Valley $663,821.09 Female tvenmore3@gmpg.org Central New York $175,818.02 Female ustanden6@geocities.jp 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 대소 문자에 상관없이 동일한 텍스트가 포함 된 이러한 차이 및 일치 필드를 무시합니다.
다음 명령을 입력합니다 :
join -1 1 -2 2 -i file-7.txt file-9.txt

8 개 라인 모두 일치하고 성공적으로 결합됩니다.
믹스 앤 매치
에 join어색한 데이터 준비로 레슬링을 할 때 강력한 동맹이됩니다. 아마도 데이터를 분석해야하거나 다른 시스템으로 가져 오기를 수행하기 위해 데이터를 모양으로 정리하려고 할 수도 있습니다.
상황이 어떻든 상관없이 기뻐할 것입니다 join 당신의 구석에!








