De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 21 de abril de 2025
O comando comm
é uma ferramenta poderosa e pouco conhecida do Linux, usada para comparar dois arquivos linha a linha e mostrar suas similaridades e diferenças de forma simples. Ele é útil, por exemplo, para analisar listas, resultados de scripts ou controlar alterações em arquivos de texto.
O comm
lê dois arquivos ordenados (por padrão, em ordem alfabética), e produz uma saída dividida em três colunas:
comm [opções] arquivo1 arquivo2
Importante: Os arquivos de entrada devem estar ordenados. Se não tiver
certeza, utilize o comando sort
primeiro.
$ sort arquivoA.txt -o arquivoA.txt $ sort arquivoB.txt -o arquivoB.txt
Considere dois arquivos:
arquivoA.txt
ana bruno carlos giovana
arquivoB.txt
ana carlos daniel eduarda
Executando o comm
$ comm arquivoA.txt arquivoB.txt
ana
bruno
carlos
daniel
eduarda
giovana
arquivoA
(coluna 1): bruno e giovana
arquivoB
(coluna 2): daniel e eduarda
Você pode suprimir colunas da saída usando as opções:
-1 |
Oculta a primeira coluna (mostra apenas as linhas do arquivoB e as comuns) |
-2 |
Oculta a segunda coluna |
-3 |
Oculta a terceira coluna |
Listar apenas as linhas comuns aos dois arquivos
$ comm -12 arquivoA.txt arquivoB.txt
ana
carlos
Listar apenas linhas exclusivas de arquivoA
$ comm -23 arquivoA.txt arquivoB.txt
bruno
giovana
Listar linhas exclusivas de qualquer um dos arquivos
$ comm -3 arquivoA.txt arquivoB.txt
bruno
daniel
eduarda
giovana
Para comparar arquivos que não foram ordenados, use um pipe com sort:
$ comm <(sort arquivoA.txt) <(sort arquivoB.txt)
Útil em scripts para validar resultados de listas, logs ou inventários.
Exemplo | Descrição |
---|---|
comm arquivo1 arquivo2 |
Compara ambos (os dois ordenados) |
comm -12 arquivo1 arquivo2 |
Somente linhas comuns |
comm -23 arquivo1 arquivo2 |
Só linhas exclusivas de arquivo1 |
comm -13 arquivo1 arquivo2 |
Só linhas exclusivas de arquivo2 |
comm -3 arquivo1 arquivo2 |
Diferentes (sem comuns) |
O comm
é excelente para manipular listas e comparar arquivos rapidamente,
de maneira eficiente e sem precisar recorrer a scripts avançados.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários (1)
Muito bom! Eu sempre comparava arquivos de configuração manualmente, porque sempre achei a sintaxe e saída do *diff* meio complicadas. Vou testar o *comm* na próxima oportunidade.
Obrigado pela dica!