Selecionando registros de um arquivo texto com o awk

Publicado por Jorge Alberto Corso em 05/05/2006

[ Hits: 7.299 ]

 


Selecionando registros de um arquivo texto com o awk



Precisei fazer um shell script onde deveria selecionar alguns registros (linhas) de um arquivo texto com base em determinada data e hora. Utilizei o awk e achei muito interessante, vejam como o utilizei:

Conteúdo do arquivo texto chamado id01.txt:

10/01/2006 01:05:50 771.000000
10/01/2006 01:06:50 773.000000
10/01/2006 01:07:50 774.000000
10/01/2006 01:08:50 773.000000
10/01/2006 01:09:50 771.000000
10/01/2006 01:10:51 769.000000
10/01/2006 01:11:51 768.000000
10/01/2006 01:12:51 767.000000
10/01/2006 01:13:51 769.000000
10/01/2006 01:14:51 772.000000
10/01/2006 01:15:51 774.000000
10/01/2006 01:16:51 774.000000
10/01/2006 01:17:51 773.000000
10/01/2006 01:18:51 771.000000
10/01/2006 01:19:51 769.000000
10/01/2006 01:20:51 767.000000
10/01/2006 01:21:52 768.000000
10/01/2006 01:22:52 771.000000
10/01/2006 01:23:52 773.000000

As colunas são: data, hora e temperatura.

Para selecionar os registros do dia 10/01/2006, entre 01:10:00 h e 01:20:00 h, por exemplo, podemos usar o awk da seguinte forma:

# awk '$1$2 >= "10/01/200601:10:00" && $1$2 <= "10/01/200601:20:59"' id01.txt

Que produzirá o seguinte resultado:

10/01/2006 01:10:51 769.000000
10/01/2006 01:11:51 768.000000
10/01/2006 01:12:51 767.000000
10/01/2006 01:13:51 769.000000
10/01/2006 01:14:51 772.000000
10/01/2006 01:15:51 774.000000
10/01/2006 01:16:51 774.000000
10/01/2006 01:17:51 773.000000
10/01/2006 01:18:51 771.000000
10/01/2006 01:19:51 769.000000
10/01/2006 01:20:51 767.000000

Algumas explicações:

O awk funciona assim: awk ' [padrão] [{ação}] '.

Perceba que ambos os parâmetros são opcionais e dentro de aspas simples. Caso a ação não seja especificado o padrão é a exibição de toda a linha lida (entenda linha como a seqüência de caracteres até o encontro de um "Enter" ou carriage-return). Caso o padrão não seja especificado, todas as linhas do arquivo sofrerão a ação especificada.

Veja também que, como queria verificar dois valores, juntei as variáveis $1 e $2 ($1$2) e NÃO acrescentei espaço no conteúdo a ser comparado ("10/01/200601:10:00).

Para imprimir apenas a terceira coluna, no exemplo acima, basta acrescentar a ação {print $3}, assim:

# awk ' $1$2 >= "10/01/200601:10:00" && $1$2 <= "10/01/200601:20:59" {print $3} ' id01.txt

Em tempo, o && significa "e" e o || significa "ou".

O awk é muito poderoso, e imagino que para aqueles que ainda não o conhecem e saibam programar que a dica acima poderá ser útil e um incentivo a conhecê-lo um pouco mais profundamente.

Outras dicas deste autor

Conversão de arquivos EBCDIC para ASCII

Permissão para desligar o sistema

Otimizar o mascaramento NAT

Leitura recomendada

Solucionando problemas com o xmessage no wine

Descobrir o MAC address de um IP com arping

cURL - Brute-force em aplicações Web

Configuração de placas de vídeo nVidia através do module assistant

Comentando várias linhas em scripts bash

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário