Comparação de Linhas Comuns no Linux

LinuxBeginner
Pratique Agora

Introdução

No ambiente Linux, a comparação de arquivos é uma tarefa comum para administradores de sistema e desenvolvedores. O comando comm é uma ferramenta poderosa que permite aos usuários comparar dois arquivos de texto ordenados linha por linha e identificar as linhas únicas e comuns entre eles.

Este laboratório irá guiá-lo através do uso do comando comm para analisar arquivos de texto. Você aprenderá como criar arquivos de teste, comparar seus conteúdos e extrair informações específicas dos resultados da comparação. Ao final deste laboratório, você terá uma sólida compreensão de como usar este comando versátil para tarefas de comparação de arquivos no Linux.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 100%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Prepare seus Arquivos de Texto

Antes de podermos usar o comando comm, precisamos criar alguns arquivos de texto de exemplo para trabalhar. Nesta etapa, criaremos dois arquivos de texto contendo listas de comandos Linux comuns.

Primeiro, vamos criar um diretório de trabalho para organizar nossos arquivos:

mkdir -p ~/project/comm-lab
cd ~/project/comm-lab

Agora, vamos criar nosso primeiro arquivo de texto chamado commands1.txt com uma lista de comandos Linux:

echo -e "ls\ncd\npwd\nmkdir\ntouch\ncomm\nsed\nawk" | sort > commands1.txt

Este comando faz o seguinte:

  • echo -e exibe o texto com interpretação das sequências de escape com barra invertida (\n cria novas linhas)
  • A lista de comandos é canalizada (|) para o comando sort para ordenar alfabeticamente os itens
  • A saída ordenada é então redirecionada (>) para um arquivo chamado commands1.txt

Vamos criar um segundo arquivo de texto chamado commands2.txt com uma lista de comandos ligeiramente diferente:

echo -e "ls\ncd\npwd\ncomm\ngrep\nfind\nsed" | sort > commands2.txt

Para verificar se nossos arquivos foram criados corretamente, podemos usar o comando cat para visualizar seu conteúdo:

cat commands1.txt

Você deve ver a seguinte saída:

awk
cd
comm
ls
mkdir
pwd
sed
touch

Agora, vamos verificar o conteúdo do segundo arquivo:

cat commands2.txt

Você deve ver:

cd
comm
find
grep
ls
pwd
sed

Observe que alguns comandos aparecem em ambos os arquivos (como cd, ls, pwd, comm, sed), enquanto outros são exclusivos de cada arquivo. Essa configuração nos permitirá demonstrar vários recursos do comando comm nas próximas etapas.

Usando o Comando comm Básico

Agora que temos nossos arquivos de texto ordenados prontos, podemos explorar o uso básico do comando comm. O comando comm compara dois arquivos ordenados linha por linha e produz três colunas:

  1. Linhas exclusivas do primeiro arquivo
  2. Linhas exclusivas do segundo arquivo
  3. Linhas comuns a ambos os arquivos

Vamos executar o comando comm básico para comparar nossos dois arquivos:

cd ~/project/comm-lab
comm commands1.txt commands2.txt

Você deve ver uma saída semelhante a esta:

awk
  cd
  comm
 find
 grep
  ls
mkdir
  pwd
  sed
touch

A saída pode parecer confusa no início, mas segue um formato específico:

  • Coluna 1 (sem tabulações no início da linha): Linhas apenas em commands1.txt (awk, mkdir, touch)
  • Coluna 2 (uma tabulação no início): Linhas apenas em commands2.txt (find, grep)
  • Coluna 3 (duas tabulações no início): Linhas comuns a ambos os arquivos (cd, comm, ls, pwd, sed)

Esta saída padrão permite que você veja todas as diferenças e semelhanças de uma vez, mas pode ser difícil de ler por causa da formatação com tabulações. Na próxima etapa, aprenderemos como tornar esta saída mais útil usando as opções do comando comm.

Suprimindo Colunas com as Opções do comm

A saída padrão do comando comm pode ser difícil de ler por causa de seu formato de coluna. Felizmente, comm fornece opções para suprimir colunas específicas, o que facilita a extração apenas das informações que você precisa.

As opções são:

  • -1: Suprime a coluna 1 (linhas exclusivas do primeiro arquivo)
  • -2: Suprime a coluna 2 (linhas exclusivas do segundo arquivo)
  • -3: Suprime a coluna 3 (linhas comuns a ambos os arquivos)

Essas opções podem ser combinadas para exibir apenas os dados de seu interesse.

Encontrando Linhas Exclusivas do Primeiro Arquivo

Para exibir apenas as linhas que são exclusivas do primeiro arquivo (commands1.txt), usamos as opções -2 e -3 para suprimir as colunas 2 e 3:

cd ~/project/comm-lab
comm -23 commands1.txt commands2.txt

Saída:

awk
mkdir
touch

Estes são os comandos que aparecem apenas em commands1.txt.

Encontrando Linhas Exclusivas do Segundo Arquivo

Da mesma forma, para exibir apenas as linhas que são exclusivas do segundo arquivo (commands2.txt), usamos as opções -1 e -3:

comm -13 commands1.txt commands2.txt

Saída:

find
grep

Estes são os comandos que aparecem apenas em commands2.txt.

Encontrando Linhas Comuns

Para exibir apenas as linhas que são comuns a ambos os arquivos, usamos as opções -1 e -2:

comm -12 commands1.txt commands2.txt

Saída:

cd
comm
ls
pwd
sed

Estes são os comandos que aparecem em ambos os arquivos.

Salvando Resultados em Arquivos

É frequentemente útil salvar esses resultados em arquivos separados para referência ou processamento futuro. Vamos fazer isso:

comm -23 commands1.txt commands2.txt > unique_to_file1.txt
comm -13 commands1.txt commands2.txt > unique_to_file2.txt
comm -12 commands1.txt commands2.txt > common_lines.txt

Vamos verificar o conteúdo desses novos arquivos:

echo "Conteúdo de unique_to_file1.txt:"
cat unique_to_file1.txt
echo "Conteúdo de unique_to_file2.txt:"
cat unique_to_file2.txt
echo "Conteúdo de common_lines.txt:"
cat common_lines.txt

A saída mostrará as linhas exclusivas de cada arquivo e as linhas comuns, assim como vimos em nossos comandos anteriores.

Essas técnicas são úteis para comparar arquivos de configuração, encontrar diferenças entre versões de um arquivo ou identificar elementos compartilhados entre conjuntos de dados.

Exemplos Práticos de Uso do comm

Agora que você entende o uso básico do comando comm, vamos explorar alguns exemplos práticos que demonstram sua utilidade em cenários do mundo real.

Exemplo 1: Encontrando Novas Entradas

Imagine que você tem duas listas de usuários - uma da semana passada e outra de hoje. Você quer identificar quais usuários são novos (adicionados desde a semana passada).

Vamos criar esses arquivos:

cd ~/project/comm-lab
echo -e "user1\nuser2\nuser3\nuser4\nuser5" | sort > users_last_week.txt
echo -e "user1\nuser3\nuser5\nuser6\nuser7\nuser8" | sort > users_today.txt

Para encontrar os novos usuários (em users_today.txt mas não em users_last_week.txt):

comm -13 users_last_week.txt users_today.txt

Saída:

user6
user7
user8

Exemplo 2: Encontrando Entradas Removidas

Usando os mesmos arquivos, vamos encontrar quais usuários foram removidos desde a semana passada:

comm -23 users_last_week.txt users_today.txt

Saída:

user2
user4

Exemplo 3: Combinando comm com Outros Comandos

O comando comm pode ser combinado com outros comandos para operações mais complexas. Por exemplo, se quisermos contar quantos comandos comuns existem em nossos arquivos originais:

comm -12 commands1.txt commands2.txt | wc -l

Isso direciona as linhas comuns para o comando wc -l, que conta o número de linhas.

Saída:

5

Isso indica que existem 5 comandos comuns a ambos os arquivos.

Exemplo 4: Usando comm com Arquivos Não Ordenados

O comando comm requer arquivos de entrada ordenados. Se você tentar usá-lo com arquivos não ordenados, poderá obter resultados incorretos. Vamos demonstrar isso:

echo -e "cat\nls\npwd\ncd" > unsorted1.txt
echo -e "ls\ncat\ngrep\npwd" > unsorted2.txt

Se tentarmos usar comm diretamente:

comm unsorted1.txt unsorted2.txt

A saída pode ser enganosa porque os arquivos não estão ordenados. A abordagem correta é ordenar os arquivos primeiro:

comm <(sort unsorted1.txt) <(sort unsorted2.txt)

Isso usa a substituição de processo para ordenar os arquivos em tempo real antes de compará-los. Você deve ver um resultado formatado corretamente com as colunas corretas.

Esses exemplos demonstram a versatilidade do comando comm para comparar arquivos de texto em vários cenários, como rastreamento de alterações, encontrar diferenças e filtrar dados.

Resumo

Neste laboratório, você aprendeu como usar o comando comm no Linux para comparar arquivos de texto e identificar diferenças entre eles. Aqui está um resumo do que você realizou:

  1. Criou arquivos de texto ordenados para comparação usando comandos básicos do Linux
  2. Usou o comando comm básico para comparar dois arquivos e entender seu formato de saída de três colunas
  3. Aplicou opções de supressão de coluna (-1, -2, -3) para extrair informações específicas:
    • Linhas exclusivas do primeiro arquivo
    • Linhas exclusivas do segundo arquivo
    • Linhas comuns a ambos os arquivos
  4. Salvou os resultados da comparação em arquivos separados para referência futura
  5. Explorou exemplos práticos de uso do comm em cenários do mundo real:
    • Encontrar novas entradas em listas atualizadas
    • Identificar entradas removidas
    • Combinar comm com outros comandos para operações mais complexas
    • Lidar com arquivos não ordenados de forma apropriada

O comando comm é uma ferramenta poderosa para comparação de arquivos de texto no Linux. Ele permite que administradores de sistema, desenvolvedores e analistas de dados identifiquem eficientemente diferenças e semelhanças entre arquivos, o que é essencial para tarefas como gerenciamento de configuração, controle de versão e análise de dados.

Compreender como usar efetivamente o comm e suas opções aumentará sua produtividade ao trabalhar com arquivos de texto no ambiente da linha de comando Linux.