Data atual no awk

3

Existe uma variável constante em awk , que armazena a data de hoje? se não, existe uma maneira de armazenar a data de hoje para uso diário?

digamos que temos abaixo do arquivo:

boo,foo,2016-08-30
foo,boo,2016-07-31

E preciso comparar a data $3 no arquivo com a data de hoje, independentemente do que seja.

ou seja, abaixo do script:

awk -F, '{if($3>"2015-08-23"){print $0}}'

Onde 2015-08-23 será alterado até a data atual.

    
por Eng7 23.08.2015 / 19:34

4 respostas

14

Não há funções integradas no padrão awk para obter uma data, mas a data pode ser facilmente atribuída a uma variável.

awk -F, -v date="$(date +%Y-%m-%d)" '$3>date'

ou em um script awk

BEGIN {
    str = "date +%Y-%m-%d";
    str | getline date;
    close str;
}
$3>date

gawk tem time functions e strftime podem ser usados.

gawk -F, 'BEGIN{date=strftime("%Y-%m-%d")}$3>date'
    
por 23.08.2015 / 20:08
4

Se você gosta de obter o tempo atual, isso pode ser feito chamando srand () e depois chamando t = srand ().

$ awk 'BEGIN{srand(); print srand()}'
1440536144

Isso funciona como posix requer que a função aleatória seja inicializada com a hora atual se chamada sem arg e para retornar a semente anterior.

    
por 25.08.2015 / 22:51
3

usando a solução alternativa getline :

awk -F, ' BEGIN { "date +%Y-%m-%d" | getline a } { if ( $3>a ) { print 0 }} ' file
    
por 23.08.2015 / 20:00
2

Você pode fazer isso atribuindo uma variável:

cat /path/to/file | awk -v date="$(date +'%Y-%m-%d')" -F, '{if($3>date){print $0}}'
    
por 23.08.2015 / 19:54