Risposte:
Puoi definire funzioni awkcome:
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
Il trucco comune per questo tipo di situazioni è usare la radice quadrata del quadrato:
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
sqrt(x^2).
Fino a tardi, ma qui è una soluzione che utilizza il datecomando GNU che non si basa su 30 giorni fissi ogni mese che tutte le risposte postate sopra lo consideravano ma la risposta di 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
Per l'input seguente:
2015-09-12,2015-08-13
2017-02-12,2017-03-12
L'output è:
30
28
sqrt(x^2)va bene, masqrt(x)^2può introdurre piccoli errori che possono causare sorprese. Per busyboxawk, deve essere compilato con il supporto matematico abilitato (ad esempio non quello predefinito nei pacchetti Debian).