
파일 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 )