고급 Join 옵션
실제 데이터 처리 작업에서는 쌍을 이루지 않는 데이터를 처리하거나 특정 필드를 선택하는 등 더 고급 조인 작업이 필요한 경우가 많습니다. 이 단계에서는 join 명령의 이러한 고급 옵션을 소개합니다.
예제를 위해 더 복잡한 파일 두 개를 만들어 보겠습니다.
echo -e "1:2023-04-01:Thunderstorm\n2:2023-04-15:Hurricane\n3:2023-05-02:Tornado\n4:2023-05-10:Blizzard" > ~/project/storms_types.txt
echo -e "1:High\n2:Medium\n5:Low" > ~/project/severity.txt
이 파일들의 내용을 살펴보겠습니다.
cat ~/project/storms_types.txt
다음과 같은 출력을 볼 수 있습니다.
1:2023-04-01:Thunderstorm
2:2023-04-15:Hurricane
3:2023-05-02:Tornado
4:2023-05-10:Blizzard
cat ~/project/severity.txt
다음과 같은 출력을 볼 수 있습니다.
1:High
2:Medium
5:Low
이 파일들은 ID 가 완벽하게 일치하지 않는다는 것을 알 수 있습니다.
severity.txt에는 storms_types.txt에 존재하지 않는 폭풍 ID 5 에 대한 항목이 있습니다.
storms_types.txt에는 severity.txt에 존재하지 않는 폭풍 ID 3 과 4 에 대한 항목이 있습니다.
기본적으로 join은 조인 필드가 두 파일 모두에서 일치하는 행만 출력합니다.
join -t: ~/project/storms_types.txt ~/project/severity.txt
다음과 같은 출력을 볼 수 있습니다.
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
폭풍 ID 1 과 2 만 출력에 나타납니다. 이는 두 파일 모두에 존재하는 유일한 ID 이기 때문입니다.
쌍을 이루지 않는 행 처리하기
출력에 쌍을 이루지 않는 행을 포함하려면 -a 옵션을 사용할 수 있습니다.
join -t: -a 1 -a 2 ~/project/storms_types.txt ~/project/severity.txt
-a 1 옵션은 join에게 첫 번째 파일에서 쌍을 이루지 않는 행을 포함하도록 지시하고, -a 2는 두 번째 파일에 대해 동일한 작업을 수행합니다.
다음과 같은 출력을 볼 수 있습니다.
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
3:2023-05-02:Tornado:
4:2023-05-10:Blizzard:
5::Low
쌍을 이루지 않는 행에는 다른 파일의 데이터가 있을 위치에 빈 필드가 있음을 알 수 있습니다.
특정 필드 선택하기
-o 옵션을 사용하여 각 파일에서 출력에 포함할 특정 필드를 선택할 수도 있습니다.
join -t: -o 1.1,1.3,2.2 ~/project/storms_types.txt ~/project/severity.txt
-o 1.1,1.3,2.2 옵션은 출력할 필드를 지정합니다.
1.1: 첫 번째 파일의 첫 번째 필드 (폭풍 ID)
1.3: 첫 번째 파일의 세 번째 필드 (폭풍 유형)
2.2: 두 번째 파일의 두 번째 필드 (심각도)
다음과 같은 출력을 볼 수 있습니다.
1:Thunderstorm:High
2:Hurricane:Medium
이 출력에는 폭풍 ID, 폭풍 유형 및 심각도 수준만 포함되며 날짜 정보는 생략됩니다. 이는 많은 필드가 있지만 출력에 특정 필드만 필요한 파일로 작업할 때 특히 유용합니다.