Selecionando registros de um arquivo texto com o awk

Publicado por Jorge Alberto Corso em 05/05/2006

[ Hits: 8.081 ]

 


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

Otimizar o mascaramento NAT

Permissão para desligar o sistema

Leitura recomendada

Fancy Git

Controle de usuários logados

Comentar em bloco

Bloquear mais de uma execução simultânea do script (bash)

Descobrir o MAC address de um IP com arping

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts