열을 기준으로 두 파일 결합

열을 기준으로 두 파일 결합

파일 1:

a, 1    
b, 5    
c, 2    
f, 7

파일 2:

a, 2    
f, 9    
g, 3

아래와 같이 열 1을 기준으로 파일 1과 파일 2를 결합하고 파일 3을 가져오고 싶습니다.

파일 3:

a, 1, 2    
b, 5, -    
c, 2, -    
f, 7, 9    
g, -, 3

일치하는 값을 병합하고 각 파일에 특정 값을 유지합니다.

답변1

사용 join:

$ join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' file1 file2
a, 1, 2
b, 5, -
c, 2, -
f, 7, 9
g, -, 3

표준 join유틸리티는 두 장치 모두에서 관계형 JOIN 작업을 수행합니다.정렬됨입력 파일.

여기에 사용된 플래그는 유틸리티가 쉼표로 구분된 입력( -t,)을 허용하고 두 파일의 모든 항목에 대한 출력을 생성하도록 지시합니다( -a 1 -a 2그렇지 않으면 일치하는 첫 번째 필드가 있는 행에 대한 출력만 생성합니다). 그런 다음 연결된 필드와 두 파일의 두 번째 열( )의 출력을 요청하고 누락된 필드가 문자열 (공백-대시, ) -o0,1.2,2.2로 대체되어야 함을 나타냅니다 .␣--e ' -'

입력이 정렬되지 않은 경우 사전 정렬해야 합니다. 프로세스 대체를 이해하는 쉘에서는 <( ... )다음을 통해 수행할 수 있습니다.

join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' <( sort file1 ) <( sort file2 )

관련 정보