O comando join
Dica publicada em Linux / Comandos
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)
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)
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
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