Analisa o arquivo de log para alterações de valor

1

De esta resposta reduzi um arquivo de log para isso:

Timestamp:1359021601 2013-01-17 15:00:01
size: 10G   /mnt/SolrFiles/solr/api/
Timestamp:1359025201 2013-01-17 16:00:01
size: 11G   /mnt/SolrFiles/solr/api/
...snip hundreds of lines...
Timestamp:1359021601 2013-01-24 10:00:01
size: 11G   /mnt/SolrFiles/solr/api/
Timestamp:1359025201 2013-01-24 11:00:01
size: 11G   /mnt/SolrFiles/solr/api/
Timestamp:1359028801 2013-01-24 12:00:01
size: 11G   /mnt/SolrFiles/solr/api/
Timestamp:1359032401 2013-01-24 13:00:01
size: 12G   /mnt/SolrFiles/solr/api/

Esse padrão continuará por centenas de linhas. Gostaria de reduzir o arquivo para mostrar apenas os carimbos de data e hora e tamanhos quando o tamanho mudar, assim:

Timestamp:1359021601 2013-01-17 15:00:01
size: 10G   /mnt/SolrFiles/solr/api/
Timestamp:1359025201 2013-01-17 16:00:01
size: 11G   /mnt/SolrFiles/solr/api/
Timestamp:1359032401 2013-01-24 13:00:01
size: 12G   /mnt/SolrFiles/solr/api/

Isso pode ser feito usando ferramentas Linux CLI comuns, como grep e sed?

    
por dotancohen 24.01.2013 / 15:53

1 resposta

7

Esse é um trabalho típico para awk :

awk '/^Timestamp/{t=$0; next}
     /^size/ && $2 != last_size {
        print t
        print
        last_size = $2
     }'

Se você quiser torná-lo obscuro e consistente, você pode fazer:

awk '!(/^T/&&t=$0)&&$2!=l&&(l=$2)&&$0=t RS$0'
    
por 24.01.2013 / 16:11