comm - comm

comm
Autor (es) original (is) Lee E. McMahon
Desenvolvedor (s) AT&T Bell Laboratories , Richard Stallman , David MacKenzie
lançamento inicial Novembro de 1973 ; 47 anos atrás ( 1973-11 )
Sistema operacional Unix , semelhante ao Unix , Plan 9 , Inferno
Plataforma Plataforma cruzada
Modelo Comando
Licença coreutils : GPLv3 +

O comando comm na família Unix de sistemas operacionais de computador é um utilitário usado para comparar dois arquivos para linhas comuns e distintas. comm é especificado no padrão POSIX . Ele está amplamente disponível em sistemas operacionais do tipo Unix desde meados até o final dos anos 1980.

História

Escrito por Lee E. McMahon , comm apareceu pela primeira vez na versão 4 do Unix .

A versão do comm empacotada no GNU coreutils foi escrita por Richard Stallman e David MacKenzie.

Uso

comm lê dois arquivos como entrada, considerados como linhas de texto. comm gera um arquivo, que contém três colunas. As primeiras duas colunas contêm linhas exclusivas para o primeiro e o segundo arquivo, respectivamente. A última coluna contém linhas comuns a ambos. Funcionalmente, é semelhante ao diff .

As colunas normalmente são distinguidas com o caractere <tab> . Se os arquivos de entrada contiverem linhas que começam com o caractere separador, as colunas de saída podem se tornar ambíguas.

Para eficiência, as implementações padrão de comm esperam que os dois arquivos de entrada sejam sequenciados na mesma ordem de agrupamento de linha , classificados lexicamente. O comando sort (Unix) pode ser usado para esse propósito.

O algoritmo de comunicação usa a seqüência de intercalação do local atual . Se as linhas nos arquivos não forem agrupadas de acordo com a localidade atual, o resultado será indefinido.

Código de retorno

Ao contrário de diff , o código de retorno de comm não tem significado lógico em relação ao relacionamento dos dois arquivos. Um código de retorno 0 indica sucesso, um código de retorno> 0 indica que ocorreu um erro durante o processamento.

Exemplo

$ cat foo
apple
banana
eggplant
$ cat bar
apple
banana
banana
zucchini
$ comm foo bar
                  apple
                  banana
          banana
eggplant
          zucchini

Isso mostra que ambos os arquivos têm uma banana, mas apenas a barra tem uma segunda banana.

Mais detalhadamente, o arquivo de saída tem a aparência a seguir. Observe que a coluna é interpretada pelo número de caracteres de tabulação à esquerda. \ t representa um caractere de tabulação e \ n representa uma nova linha ( caractere de escape # Programação e formatos de dados ).

0 1 2 3 4 5 6 7 8 9
0 \ t \ t uma p p eu e \ n
1 \ t \ t b uma n uma n uma \ n
2 \ t b uma n uma n uma \ n
3 e g g p eu uma n t \ n
4 \ t z você c c h eu n eu \ n

Comparação com diff

Em termos gerais, diff é um utilitário mais poderoso do que comm . O comm mais simples é o mais adequado para uso em scripts.

A principal distinção entre comm e diff é que comm descarta informações sobre a ordem das linhas antes da classificação.

Uma pequena diferença entre comm e diff é que comm não tentará indicar que uma linha "mudou" entre os dois arquivos; as linhas são mostradas nas colunas "do arquivo # 1", "do arquivo # 2" ou "em ambos". Isso pode ser útil se alguém deseja que duas linhas sejam consideradas diferentes, mesmo que elas tenham apenas diferenças sutis.

Outras opções

comm tem opções de linha de comando para suprimir qualquer uma das três colunas. Isso é útil para scripts.

Também existe uma opção para ler um arquivo (mas não ambos) da entrada padrão.

Limites

Até uma linha completa deve ser armazenada em buffer de cada arquivo de entrada durante a comparação de linha, antes que a próxima linha de saída seja gravada.

Algumas implementações leem linhas com a função readlinebuffer () que não impõe nenhum limite de comprimento de linha se a memória do sistema for suficiente.

Outras implementações leem linhas com a função fgets () . Esta função requer um buffer fixo. Para essas implementações, o buffer geralmente é dimensionado de acordo com a macro POSIX LINE_MAX .

Veja também

Referências

links externos