2013-07-28 1 views
0

join 명령의 의미에 대한 이해가 부족합니다. 쉘 스크립트를 병합하고 더미 값을 추가하고 싶습니다.더미 항목이있는 UNIX 조인 명령

두 파일을 병합하고 있습니다. 파일 A에는 KEY 열이있는 4 개의 열이 있습니다. 파일 B에는 60K + 열이 있는데 첫 번째 열은 KEY 열입니다.

두 키가 모두 ~ 80 %로 겹칩니다.

목표 : 파일 A의 모든 항목과 파일 B의 일치하는 행인 파일 C를 만듭니다. A가 B와 일치하지 않으면 모든 누락 된 필드에 더미 값 "0"을 삽입하고 싶습니다. 60K + 필드)

접근 : 쉘 스크립팅 초보자로서

, 나는 간단한 join이 효과적 일 것이라고 생각. 나는 먼저 sort -k#을 적절히 사용하여 KEY 값으로 파일 A와 B를 정렬했습니다. 이제

join -a1 -1 2 -2 1 -e "0" file.A file.B > file.C 

, 어떻게 이 필드/열이보고 볼에 가입합니까? 파일 B는 다음과 같이 이격되어있다 60K-1 열이 있습니다

KEY 1 0  1 1  2 4  0 1 ... 

지금, 내 명령을 시도 할 때, 파일 C가 항목의 정확한 번호를 가지고,하지만 난 누락 된 값을 추가하는 방법을 알아낼 수 없었다. 파일 A에는 파일 B가 가지고 있지 않은 항목이 있으며 파일 B가 파일 A와 일치하지 않는 모든 열에 null 값 0을 넣고 싶습니다.

따라서 파일 C에서 결과는 다음과 같아야합니다. (에 대한 이해에 따라 가입) 다음 나에게 중요하지 않습니다에 참여하지만, 파일 B는 교류 탭 공간 탭 공간 형식으로 작성됩니다

KEY A1 A2 A3 A4 1 0  1 1  2 4  0 1 ... 
KEY A1 A2 A3 A4 0 0  0 0  0 0  0 0 ... 

간격 후에.

내가 질문했을 때 join -e "0"이 내 더미 값에 추가되지 않는 이유는 무엇입니까? 이 작업을 수행하는 다른 쉘 전략에 대해서도 감사하겠습니다. 필자는 Perl을 줄 단위로 실행하여 병합 할 수 있음을 알고 있습니다. (로드가 너무 오래 걸리지 않으면 R을 사용합니다.)하지만 필자는 쉘이 더 강력하게이 기능을 갖추고 있다고 느낍니다. TEH 파일의 데이터가 혼합

EDIT. 처음 5 개의 열은 파일 A에서 문자열을 식별하고 B는 파일에서 각 추가 문자에 하나의 영숫자 문자와 키 문자열이 있습니다. 파일 A는 항상 작지만 (1MB 이하) 파일 B는 최대 2GB 이상 확장 될 수 있습니다.

시도 R : df <- read.table("file.B", header=FALSE, fill=TRUE)

+0

파일의 크기, 내용의 성격 (모든 숫자, 혼합 유형 등), 그리고 어떻게 R로 읽으려고 했습니까? –

+0

게시물을 편집해야합니다. – ashah57

+1

출력 형식 (매개 변수 -o)을 명시 적으로 정의하지 않으면 -e 매개 변수가 작동하지 않는 것 같습니다. 출력 형식을 정의 할 수는 있지만 60k + 열은 너무 많아서 할 수 없습니다. –

답변

1

내가 join 정보 페이지에서 읽기는 :

`-e STRING' 
    Replace those output fields that are missing in the input with 
    STRING. I.E. missing fields specified with the `-12jo' options. 

나는 -o이 필요한 것을 추론. 이것을 시도하십시오 :

join -a1 -1 2 -2 1 -o auto -e "0" file.A file.B > file.C 
+0

Thx. '-oauto'는 나에게 트릭을! –