sexta-feira, 30 de julho de 2010

Ordenando e buscando registros únicos

Um autor teve a idéia de atualizar seu blog com os famosos Chuck Norris Facts. Como o conteúdo de sua "postagem" já é algo muito difundido na web, ele pediu a colaboração de seus leitores que poderiam enviar para ele um arquivo contendo as frases. Passada uma semana, o autor possuía uma dúzia de arquivos e resolveu então, através de comandos bash, unir todos em um único arquivo. Concretizada a junção, ele resolveu verificar as frases e reparou que muitas eram idênticas, algo inadmissível. Abaixo, um trecho demonstrando as verdades sobre Chuck Norris obtidas:

[...]

Chuck Norris will never have a heart attack. His heart isn't nearly foolish enough to attack him.

Outer space exists because it's afraid to be on the same planet with Chuck Norris.

Chuck Norris played Russian Roulette with a fully loaded gun and won.

[...]

Outer space exists because it's afraid to be on the same planet with Chuck Norris.

[...]

O autor lembrou de um comando que filtrava o conteúdo de um arquivo eliminando as repetições, o uniq. Porém, as entradas para o comando precisam estar ordenadas, algo a ser resolvido através do comando sort. O sort é um comando que basicamente ordena arquivos texto (por padrão, do menor para o maior), possuindo também as funcionalidades de informar se um arquivo já está ordenado (-c) ou juntar dois ou mais arquivos previamente ordenados(-m). Existem diversos critérios que podem ser estabelecidos quando realizamos a função sort, abaixo alguns deles e a sintaxe do comando:

sort [opções] [arquivo]

-d Considera apenas letras, dígitos e espaços em branco ao ordenar.

-n Ordena numericamente.

-r Ordena do maior para o menor.

Após executar a ordenação, o autor então fez uso da função uniq. Abaixo, algumas opções e a sintaxe do comando uniq:

uniq [opções] [arquivo]

-i Para ignorar se a letra é maiúscula ou minúscula.
-d Imprime apenas as linhas duplicadas.
-c Junto com cada linha, imprime a quantidade de ocorrências.
-u Imprime apenas as linhas únicas (default).

Finalmente, o autor obtém uma lista contendo as verdades sobre Chuck Norris sem ter sentenças duplicadas:

[...]

Chuck Norris will never have a heart attack. His heart isn't nearly foolish enough to attack him.

Outer space exists because it's afraid to be on the same planet with Chuck Norris.

Chuck Norris played Russian Roulette with a fully loaded gun and won.

[...]

2 comentários:

  1. Sobre o Chuck Norris, não esquece da melhor de todas:

    Chuck Norris tem uma visão tão poderosa que quando olha para o horizonte enxerga a própria nuca.

    :D:D

    http://www.chucknorris.com.br

    ResponderExcluir
  2. Editei o post para deixar mais claro sobre qual comando estou falando. Antes ficou um pouco confuso e acabou dando a entender que o sort tem a opção -u, o que estava errado. Quem tem a opção -u é o uniq, ativado por default. Lamento pela confusão.

    ResponderExcluir