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 uniq
e, 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);