Réponses:
Vous pouvez définir des fonctions awkcomme:
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
L'astuce courante pour ce genre de situations est d'utiliser la racine carrée du carré:
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
sqrt(x^2).
Trop tard, mais voici une solution utilisant la datecommande GNU qui n'est pas basée sur 30 jours fixes chaque mois que toutes les réponses postées ci-dessus la considéraient comme la réponse 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
Pour l'entrée ci-dessous:
2015-09-12,2015-08-13
2017-02-12,2017-03-12
La sortie est:
30
28
sqrt(x^2)c'est bien, maissqrt(x)^2peut introduire de minuscules erreurs qui peuvent provoquer des surprises. Pour busyboxawk, il doit être construit avec le support mathématique activé (pas la valeur par défaut dans les paquets Debian par exemple).