Esta linha:
(date "+%Y%m%d" -d "$10")+0 != "$10"{print "Line:"NR" Field:10 "$10" is not in date format";next}
não chama o comando date
externo. O awk analisa isso assim:
- o operador
-
tem precedência mais alta que a concatenação de strings, então primeiro pegamos a string "% Y% m% d" e subtraímos a variáveld
, resultando no valor0
- agora pegamos o valor da variável
date
(que está vazia) e concatenamos 0 e a string "$ 10" ( não o valor do décimo campo) - isso resulta na string
"0$10"
- então adicionamos zero a essa string, resultando no valor zero
- e compare isso com o valor do décimo campo.
Isso só será igual se você tiver 0
no décimo campo.
GNU awk tem algumas funções de tempo, então você pode fazer algo como (não testado)
function validate_date(datestr, timespec) {
timespec = substr(datestr,1,4) " " substr(datestr,5,2) " " substr(datestr,7,2) " 0 0 0")
return mktime(timespec)
}
{
if (validate_date($10) == -1) {
print $10 " is an invalid date"
}
}