Comando join do Linux: Unindo Arquivos

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a utilizar o comando join no Linux para mesclar dados de múltiplos arquivos. Simularemos um cenário onde você trabalha no departamento de RH de uma empresa e precisa combinar informações de funcionários provenientes de diferentes bancos de dados. Este exercício prático demonstrará o poder e a flexibilidade do comando join para tarefas de processamento de dados.

Compreendendo os Arquivos de Dados

Vamos começar examinando o conteúdo dos nossos arquivos de dados de funcionários. Temos dois arquivos: employees.txt e salaries.txt.

Primeiro, mude para o diretório do projeto:

cd /home/labex/project

Este comando altera seu diretório de trabalho atual para /home/labex/project. Todas as operações subsequentes serão executadas neste diretório.

Agora, vamos visualizar o conteúdo de employees.txt:

cat employees.txt

O comando cat exibe o conteúdo do arquivo. Você deverá ver uma saída semelhante a esta:

1001 John Engineering
1002 Sarah Marketing
1003 Mike Sales
1004 Emily HR
1005 David Finance

Cada linha representa um funcionário com seu ID, nome e departamento.

Em seguida, vamos dar uma olhada no salaries.txt:

cat salaries.txt

A saída deve ser parecida com:

1001 75000
1002 65000
1003 70000
1004 60000
1005 80000

Este arquivo contém os IDs dos funcionários e seus respectivos salários.

Esses arquivos representam bancos de dados separados que iremos mesclar usando o comando join.

Operação Básica de Junção

Agora que entendemos nossos dados, vamos usar o comando join para mesclar as informações de ambos os arquivos com base no ID do funcionário.

Execute o seguinte comando:

join employees.txt salaries.txt

Você deverá ver uma saída como esta:

1001 John Engineering 75000
1002 Sarah Marketing 65000
1003 Mike Sales 70000
1004 Emily HR 60000
1005 David Finance 80000

Vamos analisar o que aconteceu:

  1. O comando join analisou o primeiro campo (ID do funcionário) em ambos os arquivos.
  2. Quando encontrou IDs correspondentes, ele combinou as linhas de ambos os arquivos.
  3. A saída mostra o ID do funcionário, seguido por todos os campos de employees.txt e, em seguida, todos os campos de salaries.txt (exceto o ID, que seria redundante).

Isso nos dá uma visão completa das informações de cada funcionário em uma única linha. O comando join é particularmente útil quando você tem dados divididos em vários arquivos, mas deseja visualizá-los ou analisá-los em conjunto.

Personalizando a Saída da Junção

Às vezes, podemos querer alterar a ordem dos campos em nossa saída ou incluir apenas campos específicos. Podemos fazer isso especificando os números dos campos após o comando join.

Tente este comando:

join -o 1.2,1.3,2.2,1.1 employees.txt salaries.txt

Você deverá ver:

John Engineering 75000 1001
Sarah Marketing 65000 1002
Mike Sales 70000 1003
Emily HR 60000 1004
David Finance 80000 1005

Vamos detalhar a opção -o:

  • -o significa "formato de saída" (output format)
  • 1.2 refere-se ao segundo campo do primeiro arquivo (nome)
  • 1.3 refere-se ao terceiro campo do primeiro arquivo (departamento)
  • 2.2 refere-se ao segundo campo do segundo arquivo (salário)
  • 1.1 refere-se ao primeiro campo do primeiro arquivo (ID do funcionário)

Isso nos permite personalizar a ordem das informações em nossa saída. É especialmente útil quando você precisa reorganizar dados para um formato de relatório específico ou quando precisa apenas de certos campos de cada arquivo.

Lidando com Registros Sem Correspondência

Em cenários do mundo real, você pode ter registros em um arquivo que não possuem correspondências no outro. Vamos simular isso adicionando um novo funcionário que ainda não teve um salário atribuído.

Adicione este funcionário ao employees.txt:

echo "1006 Alex IT" >> employees.txt

O operador >> anexa a nova linha ao final do arquivo sem sobrescrever o conteúdo existente.

Agora, se executarmos nosso comando join básico:

join employees.txt salaries.txt

Você notará que o Alex não aparece na saída porque não há um registro correspondente em salaries.txt.

Para incluir registros sem correspondência, podemos usar a opção -a:

join -a 1 employees.txt salaries.txt

Agora você deve ver o Alex na saída:

1001 John Engineering 75000
1002 Sarah Marketing 65000
1003 Mike Sales 70000
1004 Emily HR 60000
1005 David Finance 80000
1006 Alex IT

A opção -a 1 instrui o join a incluir linhas sem par do primeiro arquivo (employees.txt). Isso é útil quando você deseja ver todos os registros de um arquivo, mesmo que eles não tenham correspondências no outro.

Unindo por um Campo Diferente

Até agora, estivemos unindo nossos arquivos com base no primeiro campo (ID do funcionário). Mas e se quisermos unir com base em um campo diferente? Isso pode ser útil quando seus arquivos estão organizados de forma distinta ou quando você precisa mesclar dados baseados em um atributo comum que não seja um ID.

Vamos criar um novo arquivo chamado departments.txt com códigos de departamento:

cat << EOF > departments.txt
Engineering ENG
Marketing MKT
Sales SLS
HR HRS
Finance FIN
IT ITS
EOF

Este comando cria um novo arquivo departments.txt com nomes de departamentos e seus respectivos códigos.

Agora, vamos unir este arquivo com o nosso employees.txt baseando-nos no nome do departamento:

join -1 3 -2 1 employees.txt departments.txt

Você deverá ver:

Engineering 1001 John ENG
Marketing 1002 Sarah MKT
Sales 1003 Mike SLS
HR 1004 Emily HRS
Finance 1005 David FIN
IT 1006 Alex ITS

Vamos analisar o comando:

  • -1 3 diz ao join para usar o terceiro campo do primeiro arquivo (employees.txt) como o campo de junção.
  • -2 1 diz para usar o primeiro campo do segundo arquivo (departments.txt) como o campo de junção.

Isso nos permite unir arquivos com base em qualquer campo comum, não apenas no primeiro. É particularmente útil quando seus arquivos possuem estruturas diferentes, mas compartilham alguma informação em comum.

Resumo

Neste laboratório, você aprendeu a usar o comando join no Linux para mesclar dados de múltiplos arquivos. Exploramos vários recursos essenciais do join:

  • Junção básica de dois arquivos baseada em um campo comum.
  • Personalização da ordem de saída usando a opção -o.
  • Inclusão de registros sem correspondência com a opção -a.
  • Junção em campos que não sejam a primeira coluna usando as opções -1 e -2.

Outras opções do join não abordadas neste laboratório incluem:

  • -t CHAR: Usa CHAR como separador de campos de entrada e saída.
  • -i: Ignora diferenças de maiúsculas e minúsculas ao comparar campos.
  • -e STRING: Substitui campos de entrada ausentes por STRING.
  • -j FIELD: Equivalente a '-1 FIELD -2 FIELD'.
  • -v FILE_NUMBER: Semelhante a -a FILE_NUMBER, mas suprime as linhas de saída que foram unidas com sucesso.

O comando join é uma ferramenta poderosa para o processamento de dados no Linux, permitindo combinar informações de múltiplas fontes de maneira eficiente. À medida que você continuar trabalhando com dados em seu ambiente Linux, lembre-se de que o join pode ser um recurso valioso para mesclar e analisar informações de diferentes arquivos.