Respostas:
Você pode definir funções awkcomo:
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 datecomando 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)^2pode 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).