Opções Avançadas do Comando join
Em tarefas reais de processamento de dados, você frequentemente precisa de operações de junção mais avançadas, como lidar com dados não emparelhados ou selecionar campos específicos. Esta etapa apresenta essas opções avançadas do comando join.
Vamos criar mais dois arquivos complexos para nossos exemplos:
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
Vamos examinar o conteúdo desses arquivos:
cat ~/project/storms_types.txt
Você deve ver:
1:2023-04-01:Thunderstorm
2:2023-04-15:Hurricane
3:2023-05-02:Tornado
4:2023-05-10:Blizzard
cat ~/project/severity.txt
Você deve ver:
1:High
2:Medium
5:Low
Observe que esses arquivos não têm uma correspondência perfeita de IDs:
severity.txt tem uma entrada para o ID da tempestade 5, que não existe em storms_types.txt
storms_types.txt tem entradas para os IDs de tempestade 3 e 4, que não existem em severity.txt
Por padrão, join só gera linhas onde o campo de junção corresponde em ambos os arquivos:
join -t: ~/project/storms_types.txt ~/project/severity.txt
Você deve ver:
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
Apenas os IDs de tempestade 1 e 2 aparecem na saída porque são os únicos que existem em ambos os arquivos.
Lidando com Linhas Não Emparelhadas
Para incluir linhas não emparelhadas na saída, você pode usar a opção -a:
join -t: -a 1 -a 2 ~/project/storms_types.txt ~/project/severity.txt
A opção -a 1 informa ao join para incluir linhas não emparelhadas do primeiro arquivo, e -a 2 faz o mesmo para o segundo arquivo.
Você deve ver:
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
3:2023-05-02:Tornado:
4:2023-05-10:Blizzard:
5::Low
Observe como as linhas não emparelhadas têm campos vazios onde os dados do outro arquivo estariam.
Selecionando Campos Específicos
Você também pode selecionar campos específicos de cada arquivo para incluir na saída usando a opção -o:
join -t: -o 1.1,1.3,2.2 ~/project/storms_types.txt ~/project/severity.txt
A opção -o 1.1,1.3,2.2 especifica quais campos gerar:
1.1: Primeiro campo do primeiro arquivo (ID da tempestade)
1.3: Terceiro campo do primeiro arquivo (tipo de tempestade)
2.2: Segundo campo do segundo arquivo (severidade)
Você deve ver:
1:Thunderstorm:High
2:Hurricane:Medium
Esta saída inclui apenas o ID da tempestade, o tipo de tempestade e o nível de severidade, omitindo as informações da data. Isso é particularmente útil ao trabalhar com arquivos que têm muitos campos, mas você só precisa de campos específicos na sua saída.