Introdução

Introdução

O comando de junção é mais um exemplo de utilitário de processamento de texto em GNU/Linux. O comando de junção combina dois arquivos com base nas linhas de conteúdo correspondentes encontradas em cada arquivo. O uso do comando de junção é bastante direto e, se usado atualmente e na situação certa, pode economizar muito tempo e esforço. Este artigo requer experiência de linha de comando muito básica.

Opções usadas com frequência

  • -1 campo
    Junte -se no campo especificado encontrado no arquivo 1
  • -2 campo
    Junte -se no campo especificado encontrado no arquivo 2
  • -t char
    Use char como um separador de entrada e saída

Fundamentos

O uso básico do comando de junção é o uso sem opções. Tudo o que é necessário é especificar 2 arquivos como argumentos. Digamos que temos dois arquivos a.txt e b.txt com um conteúdo seguinte:

$ cat a.TXT 1 A 2 B 3 C $ cat b.TXT 1 John 2 Linda 3 raros 

Aqui podemos ver que o primeiro campo é um candidato perfeito para realizar uma operação de junção após. Por padrão, o comando de junção executará a operação de junção em um primeiro campo onde o separador de campo é um caractere ou guia de espaço único. Portanto, executando um comando linux a seguir, nossos dois arquivos são unidos com base no campo 1:

$ ingressar a.txt b.TXT 1 A John 2 B Linda 3 C rares 

Escolha do campo

Em nosso exemplo anterior, você pode ver uma função padrão de um comando de junção. Nesta seção, veremos como podemos especificar um campo diferente no qual o comando de junção deve executar uma operação de junção. Vamos considerar um seguinte um.txt e b.arquivos txt:

$ cat a.TXT John A 1 Linda B 2 raros C 3 $ cat b.TXT 1 A 2 B 3 C 

Como podemos ver, neste caso, o primeiro campo de junção padrão não é mais correspondente. Portanto, a execução de um comando de junção nesses dois arquivos não produzirá nenhuma saída. No entanto, também podemos ver que o segundo campo no primeiro arquivo está correspondendo ao segundo campo no segundo arquivo. Como resultado, podemos modificar o comportamento padrão do comando de junção e ingressar nos dois arquivos com base no segundo campo em cada arquivo:

$ junção -1 2 -2 2 a.txt b.TXT A John 1 1 B Linda 2 2 C rares 3 3 

onde -1 é um primeiro arquivo e 2 é um segundo campo e -2 é um segundo arquivo e 2 é uma segunda coluna. Nesse caso, apenas porque os dois campos correspondentes são o segundo, podemos usar -j como um atalho.

$ junção -j 2 a.txt b.TXT A John 1 1 B Linda 2 2 C rares 3 3 

Como você já notou um terceiro campo e o primeiro campo em ambos os arquivos também pode ser usado para uma operação de junção.

$ junção -1 2 -2 2 a.txt b.TXT A John 1 1 B Linda 2 2 C rares 3 3 $ junção -1 3 -2 1 a.txt b.TXT 1 John A A 2 Linda B B 3 raros C C 

É importante observar dos últimos exemplos que o comando de junção sempre imprimirá o campo de correspondência como primeiro.

Escolhendo delimitador de campo

Bem, nem todos os arquivos são bem formatados para uma operação de comando de junção. Como mencionado anteriormente, o delimitador de campo padrão é o espaço. Mas e se tivermos “” (vírgula) ou até uma guia como um delimitador? Vamos considerar os arquivos seguintes:

$ cat a.TXT John, a, 1 Linda, b, 2 raros, c, 3 $ cat b.TXT 1, A 2, B 3, C 

Nesse caso, a única diferença dos exemplos anteriores é que o separador de campo é ",". Para dizer ao comando ingressar qual separador de campo para usar, podemos aproveitar -se a opção -t Othewise, a sintaxe é a mesma:

$ junção -t, -1 3 -2 1 a.txt b.TXT 1, John, A, A 2, Linda, B, B 3, rares, C, C 

Vários espaços

Se seus arquivos tiverem vários espaços como delimitador de campo, a opção mais segura é convertê -los em um único delimitador de espaço. Por exemplo, ingressar nesses arquivos pode ser bastante difícil:

$ cat a.TXT John A 1 Linda B 2 raros C 3 $ cat b.TXT 1 A 2 B 3 C 

Portanto, se a situação permitir, você poderá convertê -lo em um único arquivo delimitado por espaço usando o comando sed:

$ sed -i 's/\ s \+//g' a.TXT $ sed -i 's/\ s \+//g' b.TXT $ cat a.txt b.TXT John A 1 Linda B 2 raros C 3 1 A 2 B 3 C 

Guia Um delimitador de campo

O Delimitador de Tab também é aceito pelo comando de junção como padrão. Portanto, o exemplo a seguir executará a operação de junção válida:

$ cat a.txt b.TXT John A 1 Linda B 2 raros C 3 1 A 2 B 3 C $ junção -1 3 -2 1 a.txt b.TXT 1 John A A 2 Linda B B 3 raros C C 

Ignorando o caso

Se o seu campo correspondente estiver em ordem perfeita, mas os campos de ambos os arquivos têm diferenças superior e inferior, a junção não executará uma operação de junção válida e ignorará linhas incomparáveis, a menos que -i (Ignore Case) seja usado. Observe o seguinte caso BASTIVE B No exemplo a seguir:

$ cat a.txt b.TXT John A 1 Linda B 2 raros C 3 1 A 2 B 3 C $ junção -1 2 -2 2 a.txt b.TXT A John 1 1 C rares 3 3 $ junção -i -1 2 -2 2 a.txt b.TXT A John 1 1 B Linda 2 2 C rares 3 3 

Substituindo formato de junção padrão

No exemplo seguinte, veremos como podemos substituir um comportamento padrão do formato de comando de junção com -o. Considere uma saída de junção de arquivos a.txt e b.TXT:

$ cat a.txt b.TXT John A 1 Linda B 2 raros C 3 1 A 2 B 3 C $ junção -1 2 -2 2 a.txt b.TXT A John 1 1 B Linda 2 2 C rares 3 3 

O campo de ingresso é impresso como primeiro. E se não quisermos imprimir o campo de união de juntas ou se quisermos imprimir o campo unido em ordem diferente. Nesse caso, a opção -o formato se torna muito útil. Neste exemplo, imprimiremos apenas campos correspondentes:

  • Primeiro campo no primeiro arquivo: 1.1
  • Primeiro campo no segundo arquivo: 2.1
$ junção -o 1.1 2.1 -1 2 -2 2 A.txt b.TXT John 1 Linda 2 raros 3 

Linhas não paráveis

Por padrão, apenas linhas emparíveis são impressas pelo comando de junção. -Uma opção instrui o comando de junção para incluir linhas incomparáveis. No próximo exemplo, imprimiremos todas as linhas incomparáveis ​​no arquivo 1.

$ cat a.txt b.TXT John A 1 Linda B 2 raros C 3 Lubos D 4 1 A 2 B 3 C 5 E $ junção -a 1 -o 1.1 2.1 -1 2 -2 2 A.txt b.TXT John 1 Linda 2 raros 3 lubos 

Ou o gato imprimimos todas as linhas não emparelhadas de ambos os arquivos por:

$ junção -a 1 -a 2 -o 1.1 2.1 -1 2 -2 2 A.txt b.TXT John 1 Linda 2 raros 3 Lubos 5 

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Mastering Bash Script Loops
  • Loops aninhados em scripts de basquete
  • Manipulando a entrada do usuário em scripts bash
  • Comandos básicos do Linux
  • Comandos Linux: os 20 comandos mais importantes que você precisa para…
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Como montar a imagem ISO no Linux