Respuestas:
Puede definir funciones awk
como:
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
El truco común para este tipo de situaciones es usar la raíz cuadrada del cuadrado:
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
sqrt(x^2)
.
Demasiado tarde, pero aquí hay una solución que usa el date
comando GNU que no se basa en 30 días fijos cada mes que todas las respuestas publicadas anteriormente lo consideraron como la respuesta 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 la entrada a continuación:
2015-09-12,2015-08-13
2017-02-12,2017-03-12
El resultado es:
30
28
sqrt(x^2)
está bien, perosqrt(x)^2
puede introducir pequeños errores que pueden causar sorpresas. Para busyboxawk
, debe construirse con soporte matemático habilitado (no el predeterminado en los paquetes Debian, por ejemplo).