Como usar o comando uniq no Linux

O comando Linux uniq percorre seus arquivos de texto em busca de linhas exclusivas ou duplicadas. Neste guia, cobrimos sua versatilidade e recursos, bem como como você pode aproveitar ao máximo esse utilitário bacana.

Encontrar linhas de texto correspondentes no Linux

O comando uniq é rápido, flexível e ótimo no que faz. No entanto, como muitos comandos do Linux, ele tem algumas peculiaridades – o que é bom, contanto que você as conheça. Se você mergulhar sem um mínimo de know-how interno, pode muito bem ficar confuso com os resultados. Iremos apontar essas peculiaridades à medida que avançamos.

O comando uniq é perfeito para aqueles que estão decididos a fazer uma coisa e fazer bem. É por isso que ele também é particularmente adequado para trabalhar com tubos e desempenhar seu papel em pipelines de comando. Um de seus colaboradores mais frequentes é classificar porque uniq deve ter uma entrada classificada para trabalhar.

Vamos acender!

Executando uniq sem opções

Temos um arquivo de texto que contém as letras de Robert Johnson’s música Eu acredito que vou espanar minha vassoura. Vamos ver o que o uniq faz disso.

Vamos digitar o seguinte para canalizar a saída para menos:

uniq dust-my-broom.txt | less

Conseguimos a música inteira, incluindo linhas duplicadas, em menos:

A saída do

Não parecem ser as linhas únicas nem as linhas duplicadas.

Certo – porque esta é a primeira peculiaridade. Se você executar o uniq sem opções, ele se comportará como se você tivesse usado a opção -u (linhas exclusivas). Isso diz ao uniq para imprimir apenas as linhas exclusivas do arquivo. A razão de você ver linhas duplicadas é porque, para uniq considerar uma linha uma duplicata, ela deve ser adjacente a sua duplicata, que é onde entra a classificação.

Quando classificamos o arquivo, ele agrupa as linhas duplicadas e o uniq as trata como duplicatas. Usaremos sort no arquivo, canalizar a saída classificada em uniq e, em seguida, canalizar a saída final em less.

Para fazer isso, digitamos o seguinte:

sort dust-my-broom.txt | uniq | less

O

Uma lista classificada de linhas aparece em menos.

A frase, “Eu acredito que vou tirar o pó da minha vassoura”, definitivamente aparece na música mais de uma vez. Na verdade, é repetido duas vezes nas primeiras quatro linhas da música.

Então, por que ele está aparecendo em uma lista de linhas exclusivas? Porque a primeira vez que uma linha aparece no arquivo, ela é única; apenas as entradas subsequentes são duplicadas. Você pode pensar nisso como uma listagem da primeira ocorrência de cada linha exclusiva.

Vamos usar a classificação novamente e redirecionar a saída para um novo arquivo. Dessa forma, não precisamos usar sort em todos os comandos.

Nós digitamos o seguinte comando:

sort dust-my-broom.txt > sorted.txt

O Sort.txt ”comando em uma janela de terminal. ‘ largura = ”646 ″ altura =” 57 ″ onload = ”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);” onerror = ”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”>

Agora, temos um arquivo pré-classificado para trabalhar.

Contando Duplicados

Você pode usar a opção -c (contagem) para imprimir o número de vezes que cada linha aparece em um arquivo.

Digite o seguinte comando:

uniq -c sorted.txt | less

O

Cada linha começa com o número de vezes que essa linha aparece no arquivo. No entanto, você notará que a primeira linha está em branco. Isso indica que há cinco linhas em branco no arquivo.

Saída do

Se você deseja que a saída seja classificada em ordem numérica, você pode alimentar a saída do uniq na classificação. Em nosso exemplo, usaremos as opções -r (reverso) e -n (classificação numérica) e canalizaremos os resultados para menos.

Nós digitamos o seguinte:

uniq -c sorted.txt | sort -rn | less

O

A lista é classificada em ordem decrescente com base na frequência de aparecimento de cada linha.

Listando apenas linhas duplicadas

Se quiser ver apenas as linhas que são repetidas em um arquivo, você pode usar a opção -d (repetido). Não importa quantas vezes uma linha seja duplicada em um arquivo, ela é listada apenas uma vez.

Para usar esta opção, digitamos o seguinte:

uniq -d sorted.txt

O

As linhas duplicadas são listadas para nós. Você notará a linha em branco no topo, o que significa que o arquivo contém linhas em branco duplicadas – não é um espaço deixado por uniq para compensar cosmeticamente a listagem.

Saída do

Também podemos combinar as opções -d (repetido) e -c (contagem) e canalizar a saída por meio de classificação. Isso nos dá uma lista ordenada das linhas que aparecem pelo menos duas vezes.

Digite o seguinte para usar esta opção:

uniq -d -c sorted.txt | sort -rn

O

Listando todas as linhas duplicadas

Se quiser ver uma lista de todas as linhas duplicadas, bem como uma entrada para cada vez que uma linha aparecer no arquivo, você pode usar a opção -D (todas as linhas duplicadas).

Para usar esta opção, você digita o seguinte:

uniq -D sorted.txt | less

O

A lista contém uma entrada para cada linha duplicada.

Se você usar a opção –group, ele imprimirá todas as linhas duplicadas com uma linha em branco antes (anexar) ou depois de cada grupo (anexar), ou antes e depois (ambos) de cada grupo.

Estamos usando append como nosso modificador, então digitamos o seguinte:

uniq --group=append sorted.txt | less

O

Os grupos são separados por linhas em branco para facilitar a leitura.

Saída do

Verificando um certo número de caracteres

Por padrão, o uniq verifica todo o comprimento de cada linha. Se você quiser restringir as verificações a um certo número de caracteres, no entanto, pode usar a opção -w (verificar os caracteres).

Neste exemplo, repetiremos o último comando, mas limitaremos as comparações aos primeiros três caracteres. Para isso, digitamos o seguinte comando:

uniq -w 3 --group=append sorted.txt | less

O

Os resultados e agrupamentos que recebemos são bastante diferentes.

Saída do

Todas as linhas que começam com “I b” são agrupadas porque essas partes das linhas são idênticas e, portanto, são consideradas duplicatas.

Da mesma forma, todas as linhas que começam com “I’m” são tratadas como duplicatas, mesmo que o resto do texto seja diferente.

Ignorando um certo número de caracteres

Existem alguns casos em que pode ser benéfico pular um certo número de caracteres no início de cada linha, como quando as linhas de um arquivo são numeradas. Ou, digamos que você precise do uniq para pular um carimbo de data / hora e começar a verificar as linhas do caractere seis em vez do primeiro caractere.

Abaixo está uma versão de nosso arquivo classificado com linhas numeradas.

Se quisermos que o uniq comece suas verificações de comparação no caractere três, podemos usar a opção -s (ignorar caracteres) digitando o seguinte:

uniq -s 3 -d -c numbered.txt

O

As linhas são detectadas como duplicatas e contadas corretamente. Observe que os números das linhas exibidos são aqueles da primeira ocorrência de cada duplicata.

Você também pode pular campos (uma série de caracteres e alguns espaços em branco) em vez de caracteres. Usaremos a opção -f (campos) para dizer ao uniq quais campos devem ser ignorados.

Digitamos o seguinte para dizer ao uniq para ignorar o primeiro campo:

uniq -f 1 -d -c  numbered.txt

O

Obtemos os mesmos resultados de quando pedimos ao uniq para pular três caracteres no início de cada linha.

Ignorando maiúsculas e minúsculas

Por padrão, uniq diferencia maiúsculas de minúsculas. Se a mesma letra aparecer em maiúsculas e em minúsculas, o uniq considera as linhas diferentes.

Por exemplo, verifique a saída do seguinte comando:

uniq -d -c sorted.txt | sort -rn

O

As linhas “Acredito que vou tirar o pó da minha vassoura” e “Acho que vou tirar o pó da minha vassoura” não são tratadas como duplicatas devido à diferença de maiúsculas e minúsculas no “B” em “acreditar”.

Se incluirmos a opção -i (ignorar maiúsculas e minúsculas), entretanto, essas linhas serão tratadas como duplicatas. Nós digitamos o seguinte:

uniq -d -c -i sorted.txt | sort -rn

O

As linhas agora são tratadas como duplicatas e agrupadas.

O Linux coloca uma infinidade de utilitários especiais à sua disposição. Como muitos deles, o uniq não é uma ferramenta que você usa todos os dias.

É por isso que uma grande parte de se tornar proficiente em Linux é lembrar qual ferramenta resolverá seu problema atual e onde você pode encontrá-la novamente. Porém, se você praticar, estará no caminho certo.

Ou você pode apenas pesquisar o How-To Geek – provavelmente temos um artigo sobre ele.