Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

Relatar ou omitir linhas repetidas

Sobre

Relatar ou omitir linhas repetidas.

Descrição

Filtra as linhas de correspondência adjacentes de ENTRADA (ou entrada padrão), escrevendo para SAIDA (ou saída padrão). Sem opções, as linhas de correspondência são mescladas com a primeira ocorrência.

Para mais informações consulte o manual: uniq(1)


Uso
 
uniq [OPCAO]... [ENTRADA [SAIDA]]

Para este exemplo considere o arquivo cores.txt com o seguinte conteúdo:
SHAMAN@shellscriptx:~$ cat cores.txt
azul
azul
azul
amarelo
vermelho
vermelho
cinza
cinza
branco
preto
preto
verde

Note que na lista algumas cores aparecem repetidas, enquanto outras só existe uma única ocorrência.

Exemplos

1. Removendo os itens duplicados.
SHAMAN@shellscriptx:~$ uniq cores.txt
azul
amarelo
vermelho
cinza
branco
preto
verde
Observe que foi retornado apenas um item de cada, eliminando os itens repetidos.

Por padrão, 'uniq' imprime suas linhas de entrada, porém descarta todas, exceto a primeira de linhas repetidas adjacentes, de modo que nenhuma linha de saída são repetidas. Opcionalmente, ele pode descartar linhas que não são repetidas, ou todas as linhas repetidas. A entrada não precisa ser classificada, mas as linhas de entrada repetidas são detectadas somente se forem adjacentes.

2.  Imprimindo somente os itens duplicados (separados por grupos).
SHAMAN@shellscriptx:~$ uniq -d cores.txt
azul
vermelho
cinza
preto
Note que somente os itens duplicados foram retornados, porém com apenas o primeiro item de cada linha com duas ou mais ocorrências.

3. Imprimindo somente os itens duplicados.
SHAMAN@shellscriptx:~$ uniq -D cores.txt
azul
azul
azul
vermelho
vermelho
cinza
cinza
preto
preto
É retornado somente os itens duplicados em sua ordem e  repetições.

4. Separando linhas duplicadas.
SHAMAN@shellscriptx:~$ uniq --all-repeated=separate cores.txt
azul
azul
azul


vermelho
vermelho


cinza
cinza


preto
preto
Note que é inserido uma nova linha, separando os grupos de linhas duplicadas.

Não descartar as entradas repetidas é útil principalmente em conjunto com outras opções, por exemplo, ignorar letras maiúsculas ou minúsculas, ou comparar apenas os campos selecionados. O MÉTODO é opcional; porém especifica como delimitar grupos de linhas repetidas, e deve ser um dos seguintes:

'none'

Não delimita grupos de linhas repetidas. Isso é equivalente a usar '-D' ou '--all-repeated'.

'prepend'

Insere uma nova linha na saída de cada grupo de linhas repetidas. Com '--zero-terminated' ou '-z', usa um byte zero (ASCII NUL) em vez de uma nova linha como delimitador.

'separate'

Separar grupos de linhas repetidas com uma única nova linha. Este é o mesmo que usar 'prepend', exceto que nenhum delimitador é inserido antes do primeiro grupo e, portanto, pode ser melhor adequado para a saída direta para os usuários.

5. Suprimindo as linhas duplicadas.
SHAMAN@shellscriptx:~$ uniq -u cores.txt
amarelo
branco
verde
Ao utilizar o parâmetro '-u', informados ao comando para retornar somente os itens únicos (sem repetições adjacentes).

6. Listando o número de repetições
SHAMAN@shellscriptx:~$ uniq -c cores.txt
      3 azul
      1 amarelo
      2 vermelho
      2 cinza
      1 branco
      2 preto
      1 verde
Imprimiu a quantidade de repetições subsequentes, seguido do item a qual se refere.
 
Os itens repetidos porém não adjacentes são interpretados como um grupo distinto.

Para nosso último exemplo realizei alterações no arquivo cores.txt, deixando apenas as cores verde e azul, e adicionando duas tonalidades (claro e escuro).

Veja o seu conteúdo a seguir:

SHAMAN@shellscriptx:~$ cat cores.txt
azul escuro
verde escuro
azul claro
verde claro

Observe que os itens adjacentes são diferentes, onde a única semelhança é a sua tonalidade.

7. Listando a quantidade de repetições por tonalidade.
SHAMAN@shellscriptx:~$ uniq -f 1 -c cores.txt
      2 azul escuro
      2 azul claro
Ao utilizar o parâmetro '-f 1', mudamos o comportamento do comando fazendo com que ele ignore o primeiro campo em sua avaliação, ou seja, a contagem foi realizada com base no segundo campo (tonalidade). Se houver dois ou mais campos, eles seriam avaliados.
 
Ignora N campos em cada linha antes de verificar a exclusividade. Use um Null para comparação se uma linha tem menos de N campos. Os campos são sequências de caracteres não tabulares que são separadas entre si por pelo menos um espaço ou tab.
 
Para compatibilidade 'uniq' suporta uma sintaxe de opção obsoleta '-N'. Novos scripts devem usar '-f N' em vez disso.


Comentários

Contato

Nome

E-mail *

Mensagem *