Como usar o comando uniq no Linux

Conteúdo

Um prompt de shell em um computador Linux.

El Linux uniq o comando percorre seus arquivos de texto para linhas simples ou duplicadas. Neste guia, cobrimos sua versatilidade e recursos, e também como você pode obter o máximo deste utilitário bacana.

Encontre linhas de texto correspondentes no Linux

a uniq o comando é Rápido, flexível e excelente no que faz. Porém, como muitos comandos linux, tem algumas peculiaridades, Qual é certo, contanto que você os conheça. Se você mergulhar sem um pouco de conhecimento interno, você pode ficar coçando a cabeça com os resultados. Iremos apontar essas peculiaridades à medida que avançamos.

a uniq O comando é perfeito para aqueles no campo de propósito único, projetado para fazer uma coisa e fazer bem. É por isso que também é particularmente adequado para trabalhar com tubos e desempenhar seu papel em tubos de comando. Um dele colaboradores mais frequentes isto é sort Porque uniq tem que ter uma entrada legal para trabalhar.

Vamos ligar!

RELACIONADO: Como usar Pipes no Linux

Executando uniq sem opções

Temos um arquivo de texto que contém as letras de De Robert Johnson música Acho que vou espanar minha vassoura. Vamos ver o que uniq faz ela.

Vamos escrever o seguinte para canalizar a saída para less:

uniq dust-my-broom.txt | menos

Nós pegamos a música completa, incluindo linhas duplicadas, sobre less:

Isso parece não ser nem as linhas únicas nem as linhas duplicadas.

Correto, porque esta é a primeira peculiaridade. Se você correr uniq sem opções, se comporta como se tivesse usado o -u opção (linhas únicas). Isso diz uniq imprimir apenas as linhas do arquivo. O motivo de você ver linhas duplicadas é porque, por uniq considerar uma linha uma duplicata, deve ser adjacente ao seu duplicado, o que é onde sort entra.

Quando encomendamos o arquivo, agrupar as linhas duplicadas e uniq trata-os como duplicados. Usaremos sort no arquivo, saída ordenada do funil para uniqe, em seguida, canalize a saída final para less.

Para faze-lo, nós escrevemos o seguinte:

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

Uma lista ordenada de linhas aparece em less.

A linha, “Acho que vou tirar o pó da minha vassoura.”, definitivamente aparece na música mais de uma vez. De fato, repete-se duas vezes nas primeiras quatro linhas da música.

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

Vamos usar sort novamente e redirecionar a saída para um novo arquivo. Desta maneira, não temos que usar sort em cada comando.

Nós escrevemos o seguinte comando:

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

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

Contando duplicatas

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

Digite o seguinte comando:

uniq -c Sort.txt | menos

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

Se você deseja que a saída seja classificada em ordem numérica, pode alimentar a saída de uniq dentro de sort. Em nosso exemplo, nós vamos usar o -r (reverso) e -n (ordenação numérica) e canalizar os resultados para less.

Nós escrevemos o seguinte:

uniq -c Sort.txt | sort -rn | menos

A lista é organizada em ordem decrescente de acordo com a frequência de aparecimento de cada linha.

Listando apenas linhas duplicadas

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

Para usar esta opção, nós escrevemos o seguinte:

uniq -d Sort.txt

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.

Também podemos combinar o -d (repetido) e -c (contar) opções e canalizar a saída através sort. Isso nos dá uma lista ordenada de linhas que aparecem pelo menos duas vezes.

Digite o seguinte para usar esta opção:

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

Lista de todas as linhas duplicadas

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

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

uniq -D Sort.txt | menos

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

Se você usar o --group opção, imprime cada linha duplicada com uma linha em branco antes (prepend) ou depois de cada grupo (append), ou antes e depois (both) cada grupo.

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

uniq --group = append Sort.txt | menos

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

Verificar um certo número de caracteres

Por padrão, uniq verifique o comprimento total de cada linha. Porém, se você quiser restringir as verificações a um certo número de caracteres, você pode usar o -w (verificar personagens) opção.

Neste exemplo, vamos repetir o último comando, mas vamos limitar as comparações aos primeiros três caracteres. Para faze-lo, nós escrevemos o seguinte comando:

uniq -w 3 --group = append Sort.txt | menos

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

Todas as linhas que começam com “Eu b” são agrupados porque essas partes das linhas são idênticas, então eles são considerados duplicatas.

Do mesmo modo, todas as linhas que começam com “Eu sou.” são tratados como duplicatas, mesmo que o resto do texto seja diferente.

Ignora um certo número de caracteres

Existem alguns casos em que pode ser benéfico omitir um certo número de caracteres no início de cada linha, como quando as linhas de um arquivo são numeradas. Ou diga o que você precisa uniq 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 do nosso arquivo classificado com linhas numeradas.

Se nós quisermos uniq para começar seus testes de comparação no personagem três, podemos usar o -s (pular personagens) escrevendo o seguinte:

uniq -s 3 -d -c numbered.txt

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

Você também pode omitir campos (uma sequência de caracteres e alguns espaços em branco) em vez de personagens. Nós vamos usar o -f (campos) opção de contar uniq quais campos ignorar.

Escrevemos o seguinte para contar uniq ignorar o primeiro campo:

uniq -f 1 -d -c numerado.txt

Obtemos os mesmos resultados que obtivemos quando dissemos uniq omitir três caracteres no início de cada linha.

Ignorando o caso

Por padrão, uniq é sensível a maiúsculas e minúsculas. Se a mesma letra aparecer em maiúsculas e minúsculas, uniq considere que as linhas são diferentes.

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

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

As linhas “Acho que vou tirar o pó da minha vassoura.” e “Acho que vou tirar o pó da minha vassoura.” não são tratados como duplicatas devido à diferença caso no “B” sobre “crer”.

Se incluirmos o -i (ignorar maiúsculas e minúsculas), porém, essas linhas serão tratadas como duplicatas. Nós escrevemos o seguinte:

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

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


O Linux oferece uma infinidade de utilitários especiais. Como muitos deles, uniq não é uma ferramenta que você usará todos os dias.

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

O bem, você sempre pode pesquisar How-To Geek; provavelmente temos um artigo sobre isso.

setTimeout(função(){
!função(f,b,e,v,n,t,s)
{E se(f.fbq)Retorna;n = f.fbq = função(){n.callMethod?
n.callMethod.apply(n,argumentos):n.queue.push(argumentos)};
E se(!f._fbq)f._fbq = n;n.push = n;n.loaded =!0;n.version = ’2.0′;
n.queue =[];t = b.createElement(e);t.async =!0;
t.src = v;s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, documento,'roteiro',
‘Https://connect.facebook.net/en_US/fbevents.js ’);
fbq('iniciar', ‘335401813750447’);
fbq('acompanhar', ‘PageView’);
},3000);

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.