두 파일을 병합하기 위해 Join 명령을 사용하는 데 문제가 있습니다. 첫 번째 파일은 csv 파일입니다.
NAIN GENIEU 01/01/1900,A,B
NAIN GENIEUR 01/01/1917,C,D
NAINGENIEUR 21/01/1917,E,F
두 번째 파일에는 흥미로운 ID만 포함되어 있습니다.
NAIN GENIEUR 01/01/1917
나는 이것을 출력으로 원합니다 :
NAIN GENIEUR 01/01/1917,C,D
두 파일 모두 sort
bash 명령을 사용하여 정렬됩니다. 인수 없이 조인을 사용하면 기본적으로 공백이 사용되므로 조인은 되지만 공백 이후에는 아무 것도 PSEUDO
고려하지 않습니다 . 매개변수를 사용할 때 출력이 전혀 나오지 않습니다(있어야 함에도 불구하고).BIRTHDAY
PSEUDO
-t","
이 문제를 해결하는 방법에 대한 단서가 있습니까? 그런데 저는 Join v.8.4를 사용하고 있습니다.
편집하다첫 번째 필드(공백이 포함될 수 있음) 주위에 따옴표를 넣으려고 했지만 도움이 되지 않았습니다.
답변1
귀하의 필드가 (적어도 귀하의 예에서는) "full csv"라고 부르는 파일에 "PSEUDO BITHDAY" 필드가 있고 두 번째 파일에 "PSEUDO BI" 필드가 일치하지 않습니다.오른쪽THDAY" 두 번째 파일에는 추가 R이 있습니다.
-t 옵션은 모든 버전의 Join에서 사용할 수 있습니다.
편집하다: 당신의 모범은 나에게 효과적입니다
bash-4.1$ join -t, a b
NAIN GENIEUR 01/01/1917,C,D
bash-4.1$ join --version
join (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel.
bash-4.1$
답변2
귀하의 명령이 작동해야합니다. 그러나 적어도 표시된 예에서는 의 줄 끝에 공백이 있습니다 file2
. 그것이 현장의 일부로 간주되는 것이 중요합니다. 보시다시피, 이를 제거하면 예상대로 파일이 연결됩니다.
$ join -t"," -j 1 file1 file2 ## no output
$ sed -i 's/ $//' file2 ## remove the trailing space
$ join -t"," -j 1 file1 file2 ## now it works
NAIN GENIEUR 01/01/1917,C,D