Respostas:
Você pode definir funções awk
como:
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
O truque comum para esse tipo de situação é usar a raiz quadrada do quadrado:
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
sqrt(x^2)
.
Até tarde, mas aqui está uma solução usando o date
comando GNU que não se baseia em 30 dias fixos por mês, que todas as respostas postadas acima consideraram a resposta de steve .
awk -F, '{cmd="printf \"%d\n\" $((($(date -d"$1" +%s)-$(date -d"$2" +%s))/86400))";
cmd|getline $0; $0*=($0<0?-1:1); close(cmd)}1' infile
Para a entrada abaixo:
2015-09-12,2015-08-13
2017-02-12,2017-03-12
A saída é:
30
28
sqrt(x^2)
está bem, massqrt(x)^2
pode introduzir pequenos erros que podem causar surpresas. Para o busyboxawk
, ele precisa ser construído com suporte a matemática ativado (não o padrão nos pacotes Debian, por exemplo).