18 maio, 2009

Pipes

Um dos factores que marcam a superioridade do Unix é o conceito de pipes. No Unix a filosofia original previa o desenvolvimento de módulos que desempenhassem uma tarefa e a desempenhassem bem.

Vejam só este exemplo:

cat book*|deroff -w|dd conv=lcase|sort|uniq -c|sort -nr|more

Esta sequência de comandos irá realizar uma tarefa que iria requerer muitas linhas de código e muito planeamento. Vamos analisá-la:

cat book* - redirecciona para a saída padrão o conteúdo de ficheiros iniciados em book
deroff -w - transforma o resultado do comando cat numa saída contendo uma palavra por linha
dd conv=lcase - converte para letras minúsculas o resultado do comando deroff
sort - ordena alfabeticamente o resultado
uniq -c - agrupa palavras iguais registando o número de ocorrências
sort -nr - realiza uma nova ordenação, porém numérica, colocando no topo da lista as palavras que ocorrem com mais freqüência
more - exibe um ecrã de cada vez

Este exemplo ilustra de maneira clara como diversos comandos reunidos podem realizar tarefas complexas e num tempo ínfimo, comparado com o esforço necessário para escrever um programa que desempenhe tarefa similar. Cada um dos comandos acima realiza um processamento sobre os dados que lhe são fornecidos, preparando-os para serem processados pelo próximo comando na sequência.

Agora, para que serve isto? Por exemplo, um professor de literatura analisando a obra de Shakespeare, poderia querer determinar um padrão no uso de palavras. Outro exemplo, um professor de inglês instrumental poderia querer determinar as palavras mais utilizadas para elaborar as suas aulas de maneira mais eficiente. Poderia até mesmo determinar padrões de uso diferentes para cada área de especialização, como medicina, engenharia, administração, etc, etc. Ainda outro exemplo, um administrador de sistemas pode desejar analisar ficheiros de log criados pelo tcpwrapper, syslog, e outros para identificar padrões de invasão dos seus sistemas. As possibilidades são infinitas (e interessantes :-)

Sem comentários: