O comando join

Publicado por Perfil removido em 31/05/2005

[ Hits: 31.986 ]

 


O comando join



join [opções] [arquivo1][arquivo2]

O comando join (unir) concatena registros de dois arquivos de texto baseado em índices comuns entre os registros. O comando funciona como um tipo de banco de dados primitivo, permitindo a montagem de novos arquivos de registros a partir de registros existentes em diferentes arquivos. Somente dois arquivos podem ser relacionados de cada vez. Os arquivos devem estar ordenados em ordem crescente pelo índice. Preferencialmente utilize índices numéricos, índices alfanuméricos também são aceitos.

[arquivo1][arquivo2]
Os arquivos cujos conteúdos serão relacionados. Os arquivos devem ser referenciados como arquivo 1 e arquivo 2. Assim é possível determinar sobre qual campo o comando atuará. Abaixo um exemplo da estrutura de dois arquivos de registros. Neste caso o separador de campos será o caractere dois-pontos (:), apenas para facilitar o exemplo.

O conteúdo de Arquivo1.txt: (este será o arquivo 1)

001:Belo Horizonte:Média....................(uma linha representa um registro completo)
002:São Paulo:Enorme .......................(uma coluna é um campo)
003:Rio de Janeiro:Grande...................(entre as colunas deve existir um separador de campos)

O conteúdo de Arquivo2.txt: (Este será o arquivo 2)

001:Minas Gerais:MG......(A referência a um campo é feita na forma A.C Arquivo.Campo)
002:São Paulo:SP...........(Os campos deste arquivo são: 2.1, 2.2, 2.3)
003:Rio de janeiro:RJ
004:Espírito Santo:ES

[-opções] - pode ser igual a:
-o A.C,A.C., monta os registros na saída padrão de acordo com a ordem determinada por A.C onde A é o número do arquivo e C é a posição do campo no arquivo. Os campos A.C são separados por uma vírgula. Por exemplo, o comando abaixo aplicado em Arquivo1.txt e Arquivo2.txt gera esta saída:

# join -t: -o 1.1,1.2,2.3 Arquivo1.txt Arquivo2.txt
001:Belo Horizonte:MG
002:São Paulo:SP
003:Rio de Janeiro:RJ

1.2 é um campo que vem do arquivo 1 enquanto 2.3 é um campo que vem do arquivo 2. O índice (1.1) pode ser fornecido por qualquer um dos arquivos já que são idênticos. Observe que os arquivos estão ordenados (pelo índice) que também relaciona os registros dos dois arquivos, funcionando como uma chave primária (primary key). Chaves primárias devem ser únicas em cada arquivo e devem ter outra chave correspondente no outro arquivo. Caso não exista a chave correspondente o registro está órfão. A estrutura do registro em Arquivo1.txt é composta por três campos. O primeiro campo é o índice, o segundo campo o nome da cidade e o terceiro campo é o tamanho da cidade. Cada linha do arquivo forma um registro e cada registro em arquivo 1 pode ou não ter um correspondente em arquivo 2. A ausência de um registro correspondente não inválida os arquivos para serem usados por join.

Deste modo, a referência A.C (arquivo.campo) pode ser estabelecida. Por exemplo, caso A.C seja 2.2 a referência aponta para o arquivo 2 e para o campo dois. Neste caso, 2.2 é o nome do estado, 2.3 aponta para as siglas e 2.1 é o índice.

-t separador, especifica o separador de campos.

# join -t: Arquivo1.txt Arquivo2.txt
001:Belo Horizonte:Média:Minas Gerais:MG
002:São Paulo:Enorme:São Paulo:SP
003:Rio de Janeiro:Grande:Rio de janeiro:RJ

-v arquivo, exibe as linhas de arquivo que estão sem correspondente no outro arquivo. Serve para detectar registros órfãos.

# join -t: -v2 Arquivo1.txt Arquivo2.txt
004:Espírito Santo:ES

-a N, exibe as linhas do arquivo N mesmo que não tenham sido combinadas.

# join -a2 Arquivo1.txt Arquivo2.txt
001:Belo Horizonte:Média:Belo Horizonte:MG
002:São Paulo:Enorme:São Paulo:SP
003:Rio de Janeiro:Grande:3:Rio de janeiro:RJ
004:Espírito Santo:ES......................................(Esta linha é órfã)

Isto é tudo.

T+

Unasi

Outras dicas deste autor

Como corrigir o erro "Function create_function() is deprecated" no PhpLdapAdmin

JSTL - Problemas com tags

Driver de vídeo alternativo no Slackware 12

Verificando se algum parâmetro foi passado via GET para uma página PHP sem precisar testar um a um

Instalando navegador Google Chrome no Fedora 27

Leitura recomendada

RMVB para AVI no Linux

TAR seletivo

Montar imagem ISO para abrir VLC

Como reparar Portage danificado

Monitorando tráfego da interface de rede em três comandos

  

Comentários
[1] Comentário enviado por aluxbruno em 05/02/2011 - 23:51h

parceiro isso contribuiu pra mim bastante eu tenho o objetivo em tirar minha lpi mais tem alguns comando que eu não lembro mais vlw muito me ajudou bastante

[2] Comentário enviado por Cabeça de Teia em 24/05/2011 - 15:23h

Muito Nolinux, ótimo artigo, vc consegui exclarecer muita dúvidas minhas referentes a esse comando de maneira simples, rápida e objetiva. Meus párabéns!

[3] Comentário enviado por edertux em 16/11/2011 - 17:33h

Excelente Nolinux!
Sua dica foi mais esclarecedora do que conteúdo que consta no livro preparatório para LPI que tenho aqui, e mais completa do que conteúdo da apostila da 4Linux também.
Me ajudou muito... Parabéns!
Um abraço.

PS: Esta dica foi postada em 2005 porém, considerando apenas o reconhecimento, ajudou a 3 pessoas 6 anos depois. #vivaainternet \õ/

[4] Comentário enviado por edertux em 16/11/2011 - 17:50h

Ah, um detalhe:

No último bloco...

# join -a2 Arquivo1.txt Arquivo2.txt
001:Belo Horizonte:Média:Belo Horizonte:MG
002:São Paulo:Enorme:São Paulo:SP
003:Rio de Janeiro:Grande:3:Rio de janeiro:RJ
004:Espírito Santo:ES......................................(Esta linha é órfã)

...faltou a opção "-t:", que corrigindo fica assim:

# join -t: -a2 Arquivo1.txt Arquivo2.txt
001:Belo Horizonte:Média:Belo Horizonte:MG
002:São Paulo:Enorme:São Paulo:SP
003:Rio de Janeiro:Grande:3:Rio de janeiro:RJ
004:Espírito Santo:ES......................................(Esta linha é órfã)

Falows galera! ;-)

[5] Comentário enviado por azraelm em 12/12/2011 - 17:10h

Valeu!!!!
Ajudou muito!!!! \o



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts