join e split
100%

Text-Fu · Lição 11

join e split

Aprenda a unir dois arquivos de texto ordenados por uma chave e dividir um arquivo em partes nomeadas.

Os comandos join e split resolvem problemas diferentes de processamento de arquivos. join combina registros relacionados de duas entradas de texto ordenadas, enquanto split divide uma entrada em uma sequência de arquivos menores.

União de Dois Arquivos pelo Primeiro Campo

Por padrão, join compara o primeiro campo separado por espaços em exatamente dois arquivos de entrada. Considere estes arquivos já ordenados:

people.txt:

1 John
2 Jane
3 Mary

surnames.txt:

1 Doe
2 Doe
3 Sue

Una os registros cujos campos-chave são iguais:

$ join people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue

A saída contém uma vez a chave compartilhada, seguida dos campos restantes do primeiro e do segundo arquivo. join processa dois arquivos de cada vez; ele não aceita três operandos comuns como uma união relacional de três vias.

Sem opções de campo, quais registros join first.txt second.txt combina?

Ordenação das Chaves de União

Cada entrada precisa estar ordenada por seu campo de união com regras de comparação compatíveis. Para o campo 1 padrão, prepare cópias com sort -k 1,1:

$ LC_ALL=C sort -k 1,1 people-raw.txt > people.txt
$ LC_ALL=C sort -k 1,1 surnames-raw.txt > surnames.txt
$ LC_ALL=C join people.txt surnames.txt

Usar o mesmo locale na ordenação e na união mantém as regras de comparação consistentes. Não redirecione a saída de sort para seu próprio caminho de entrada, pois o shell truncaria esse arquivo primeiro.

Que preparação join normalmente exige para uma correspondência confiável?

Seleção de Outros Campos de União

Use -1 FIELD para a chave do primeiro arquivo e -2 FIELD para a chave do segundo. Suponha que a primeira entrada contenha:

John 1
Jane 2
Mary 3

A segunda contém:

1 Doe
2 Doe
3 Sue

Depois de ordenar o primeiro arquivo pelo campo 2 e o segundo pelo campo 1, execute:

$ join -1 2 -2 1 people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue

Use -t CHARACTER quando um único caractere não vazio, como :, separar os campos. Opções como -a 1 ou -a 2 podem incluir linhas sem pares de uma das entradas; por padrão, a saída contém apenas chaves correspondentes.

Quais opções unem o campo 2 do primeiro arquivo ao campo 1 do segundo?

Divisão por Quantidade de Linhas

split grava partes consecutivas de uma entrada em arquivos separados. Ele não é o inverso de uma operação join baseada em chaves.

$ split large.txt

O comportamento padrão do GNU grava até 1.000 linhas por arquivo de saída e usa o prefixo x, produzindo nomes como xaa, xab e xac.

Use -l NUMBER para escolher a quantidade de linhas e acrescente um último operando para definir o prefixo:

$ split -l 500 large.txt part-

Isso produz part-aa, part-ab e assim por diante, com no máximo 500 linhas em cada parte.

Qual comando divide large.txt em partes de no máximo 500 linhas, com nomes iniciados por part-?

Divisão por Tamanho

Use -b SIZE para dividir a entrada por tamanho em bytes. Nesse contexto, sufixos do GNU como K, M e G representam potências de 1024:

$ split -b 10M archive.bin chunk-

Esse comando solicita partes de 10 mebibytes, com exceção de uma possível parte final menor. split não cria um manifesto nem metadados de remontagem; preserve a ordem dos sufixos e concatene as partes nessa ordem quando a reconstrução for apropriada.

Qual comando divide archive.bin em partes de 10 MiB com o prefixo chunk-?

Para praticar uniões por chave e o processamento de dados estruturados, experimente estes laboratórios:

  1. Comando join do Linux: União de Arquivos — Este laboratório oferece uma introdução prática e direta ao comando join, permitindo que você pratique a mesclagem de linhas de dois arquivos de texto ordenados com base em um campo comum, exatamente como apresentado na lição.
  2. Processamento de Dados de Funcionários — Aplique seus conhecimentos de join e de outros utilitários avançados da linha de comando do Linux, como awk, para combinar e processar dados de várias fontes, simulando um cenário real de análise de dados.

Lição concluída

Você concluiu join e split

Agora você sabe combinar registros ordenados ou dividir uma entrada em partes sequenciais.

  • Una exatamente dois arquivos por campos-chave iguais.

  • Ordene as duas entradas de forma consistente por suas chaves.

  • Selecione campos-chave diferentes do padrão com -1 e -2.

  • Divida por quantidade de linhas com -l.

  • Divida por tamanho em bytes com -b e um prefixo claro.

Salve seu progresso

Crie uma conta gratuita para salvar esta lição e continuar em qualquer dispositivo.

Criar uma conta gratuita
Próxima Lição
Voltar para Text-Fu