Como usar o comando uniq no Linux
Fatmawati Achmad Zaenuri / Shutterstock
O comando uniq do Linux percorre seus arquivos de texto procurando linhas únicas ou duplicadas. Neste guia, abordamos sua versatilidade e recursos, além de como você pode aproveitar ao máximo esse utilitário bacana.
Localizando linhas de texto correspondentes no Linux
O comando uniq é rápido, flexível e excelente no que faz. No entanto, como muitos comandos do Linux, ele tem algumas peculiaridades - o que é bom, desde que você saiba sobre elas. Se você mergulhar sem um pouco de conhecimento interno, poderá ficar coçando a cabeça com os resultados. Vamos mostrar essas peculiaridades à medida que avançamos.
O comando uniq é perfeito para aqueles no campo de pensamento único, projetado para fazer uma coisa e fazer bem. É por isso que também é particularmente adequado para trabalhar com tubos e desempenhar seu papel nos oleodutos de comando. Um de seus colaboradores mais frequentes é o de classificação, porque o uniq precisa classificar as entradas nas quais trabalhar.
Vamos acioná-lo!
RELACIONADO: Como usar Pipes no Linux
Executando uniq sem opções
Temos um arquivo de texto que contém a letra da música de Robert Johnson, I Believe I, Dust My Broom. Vamos ver o que o uniq faz disso.
Digitaremos o seguinte para canalizar a saída em menos:
uniq dust-my-vassoura. txt | menos
Obtemos a música inteira, incluindo linhas duplicadas, em menos:
Isso não parece 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 pela qual você vê linhas duplicadas é porque, para o uniq considerar uma linha duplicada, ela deve estar adjacente à sua duplicata, que é onde a classificação entra.
Quando ordenamos o arquivo, ele agrupa as linhas duplicadas e o uniq as trata como duplicadas. Nós usaremos a classificação no arquivo, canalizaremos a saída classificada para uniq e, em seguida, canalizaremos a saída final para menos.
Para isso, digite o seguinte:
classifique dust-my-vassoura. txt | uniq menos
Uma lista ordenada de linhas aparece em menos.
A linha, 'acredito que vou espanar minha vassoura', ” definitivamente aparece na música mais de uma vez. De fato, é repetido duas vezes nas quatro primeiras linhas da música.
Então, por que está aparecendo em uma lista de linhas exclusivas? Como a primeira vez que uma linha aparece no arquivo, ela é única; somente as entradas subseqüentes são duplicadas. Você pode pensar nisso como listar a 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 a classificação em todos os comandos.
Digitamos o seguinte comando:
classifique dust-my-vassoura. txt > classificado. txt
Agora, temos um arquivo pré-definido para trabalhar.
Contando duplicados
Você pode usar a opção -c (count) para imprimir o número de vezes que cada linha aparece em um arquivo.
Digite o seguinte comando:
uniq -c classificado. txt | menos
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.
Se você deseja que a saída seja classificada em ordem numérica, é possível alimentar a saída do uniq na classificação. No nosso exemplo, usaremos as opções -r (inverter) e -n (classificação numérica) e canalizaremos os resultados em menos.
Digitamos o seguinte:
uniq -c classificado. txt | classificar -rn | menos
A lista é classificada em ordem decrescente com base na frequência da aparência de cada linha.
Listando apenas linhas duplicadas
Se você deseja ver apenas as linhas que são repetidas em um arquivo, pode usar a opção -d (repetida). Não importa quantas vezes uma linha seja duplicada em um arquivo, ela será listada apenas uma vez.
Para usar esta opção, digite o seguinte:
uniq -d classificado. txt
As linhas duplicadas são listadas para nós. Você notará a linha em branco na parte superior, o que significa que o arquivo contém linhas em branco duplicadas - não é um espaço deixado pela uniq para compensar cosmeticamente a listagem.
Também podemos combinar as opções -d (repetidas) e -c (contagem) e canalizar a saída através da 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 classificado. txt | ordenar -rn
Listando todas as linhas duplicadas
Se você 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, digite o seguinte:
uniq -D classificado. txt | menos
A listagem contém uma entrada para cada linha duplicada.
Se você usar a opção --group, ela imprimirá todas as linhas duplicadas com uma linha em branco antes (pré-anexado) ou depois de cada grupo (anexado) ou antes e depois (ambos) de cada grupo.
Estamos usando append como nosso modificador, então digitamos o seguinte:
uniq --group = anexar classificado. txt | menos
Os grupos são separados por linhas em branco para facilitar a leitura.
Verificando um certo número de caracteres
Por padrão, o uniq verifica todo o comprimento de cada linha. Se você deseja restringir as verificações a um determinado número de caracteres, no entanto, pode usar a opção -w (verificar caracteres).
Neste exemplo, repetiremos o último comando, mas limitaremos as comparações aos três primeiros caracteres. Para isso, digite o seguinte comando:
uniq -w 3 --group = anexar classificado. txt | menos
Os resultados e agrupamentos que recebemos são bem diferentes.
Todas as linhas que começam com “ I b ” são agrupados 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" são "m" ” são tratados como duplicatas, mesmo que o restante do texto seja diferente.
Ignorando um certo número de caracteres
Em alguns casos, 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 diga que você precisa do uniq para pular um carimbo de data e hora e começar a verificar as linhas do caractere seis em vez do primeiro.
Abaixo está uma versão do nosso arquivo classificado com linhas numeradas.
Se queremos que o uniq inicie suas verificações de comparação no caractere três, podemos usar a opção -s (skip chars) digitando o seguinte:
uniq -s 3 -d -c numerado. txt
As linhas são detectadas como duplicadas e contadas corretamente. Observe que os números de linha exibidos são os da primeira ocorrência de cada duplicata.
Você também pode pular campos (uma sequência de caracteres e algum espaço em branco) em vez de caracteres. Usaremos a opção -f (fields) para informar ao uniq quais campos ignorar.
Digitamos o seguinte para dizer ao uniq para ignorar o primeiro campo:
uniq -f 1 -d -c numerado. txt
Obtemos os mesmos resultados que obtivemos quando dissemos ao uniq para pular três caracteres no início de cada linha.
Ignorando maiúsculas
Por padrão, o uniq faz distinção entre maiúsculas e minúsculas. Se a mesma letra aparecer em maiúsculas e minúsculas, o uniq considera as linhas diferentes.
Por exemplo, verifique a saída do seguinte comando:
uniq -d -c classificado. txt | ordenar -rn
As linhas "Eu acredito que vou espanar minha vassoura" ” e eu acredito que vou espanar minha vassoura ” não são tratados como duplicados devido à diferença de casos no “ B ” em “ acreditar. ”
Se incluirmos a opção -i (ignorar maiúsculas e minúsculas), essas linhas serão tratadas como duplicatas. Digitamos o seguinte:
uniq -d -c -i classificado. txt | ordenar -rn
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ê usará todos os dias.
É por isso que grande parte de se tornar proficiente no Linux é lembrar qual ferramenta resolverá o seu problema atual e onde você poderá encontrá-lo novamente. Se você praticar, no entanto, estará no seu caminho.
Ou você pode sempre pesquisar no How-To Geek "; provavelmente temos um artigo sobre o assunto.
Via: How to Geek
Nenhum comentário