Bash One Liners #3

Em: 26/06/2008 Tags: awk, Bash Referencie do seu blog (Trackback)

Em Bash One Liners #2 apresentei uma combinação de programas Linux para construirmos um ranking dos meses com mais artigos publicados em um blog. Com um pouco mais de esforço podemos calcular o somatório e a média de artigos publicados durante a vida do blog. É o que vamos ver agora.

Vamos começar com o seguinte arquivo (o ranking do meu blog antes de postar este artigo):

14 Fevereiro 2008
12 Novembro 2007
9 Janeiro 2008
8 Setembro 2007
7 Junho 2008
6 Dezembro 2007
5 Outubro 2007
5 Maio 2008
3 Março 2008
2 Julho 2007
2 Agosto 2007
1 Abril 2008

Supondo que esse conteúdo esteja no arquivo `ranking’, o seguinte one liner nos dá o total de artigos publicados:

awk '{ sum += $1 } END { print sum }' ranking

E para termos a média:

awk '{ sum += $1 } END { print sum / NR }' ranking

Nem precisamos de pipes desta vez. No primeiro script utilizamos a variável sum para armazenar o somatório da primeira coluna de dados do arquivo. O awk não se incomoda com variáveis não inicializadas, e é isso que nos permite fazer a totalização com um único comando. A cláusula END é especial, pois é executada apenas quando todas as linhas do arquivo já foram avaliadas. Para programas como esse que geram relatórios, essa é a parte ideal para imprimir o rodapé ou algum tipo de totalização. É exatamente isso que fazemos.

O segundo script é idêntico ao primeiro, com a exceção de que imprime a divisão do somatório pela quantidade de linhas analisadas. Na verdade NR, quando utilizado fora da cláusula END, guarda sempre o número da linha corrente, mas como estamos dentro de END ela guarda o número da última linha lida, que é exatamente o total de linhas analisadas.

Escreva um comentário (utilize o formato Markdown)