Linha de comando One-Liners: relatório "Bytes Transferred" rápido e sujo

3

Tudo bem. Então nós temos um servidor lighttpd bombeando o carregamento de nossas imagens.

Ele registra todos os dias, e estamos pensando em mover todas essas imagens para nossa conta S3 para obter melhores tempos de carregamento, mas antes que possamos fazer isso eu preciso ter pelo menos uma "sensação" de como será nossa transferência .

Então, agora temos o log de acesso lighttp padrão

accesslog.filename = "/var/log/lighttpd/images.access_log" accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

, portanto, deseja despejar todos os "bytes transferidos" desse arquivo de log, de maneira fácil e agradável.

cat images.access_log | awk '{print $10}'

que produz um resultado semelhante a este.

19547
6138
17782
8044
345
0
2727
2125
1838
1649
2127
3275
3653
0
16688

Agora - eu fiz um pouco de googling e talvez eu esteja esquecendo alguma coisa, existe um comando escondido no linux em algum lugar que vai levar toda a saída, e apenas adicionar tudo junto para mim? para que eu possa executar este comando e ter apenas um número absurdamente grande todo dia até que eu tenha uma linha de base de nossa largura de banda por dia?

--- EDIT ---

Eu encontrei o link

Existe alguma maneira de obter o awk para retornar o número completo, em vez de fazer o que é mostrado abaixo?

cat images.access_log | awk '{print $10}' | awk '{s+=$1} END {print s}' 
9.48886e+10
    
por GruffTech 10.05.2011 / 22:10

2 respostas

3

Experimente cat images.access_log | awk '{print $10}' | awk '{s+=$1} END {printf "%.f\n",s}'

    
por 10.05.2011 / 22:29
5

Você pode combiná-los em um único comando. Se a décima coluna tiver os números, então:

awk '{s+=$10} END {printf("%.d\n",s)}' images.access_log 
    
por 10.05.2011 / 22:31