Risposte:
Puoi definire funzioni awk
come:
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 date
comando 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)^2
può 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).