Відповіді:
Ви можете визначити функції на awk
зразок:
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
Загальна хитрість для подібних ситуацій полягає у використанні квадратного кореня квадрата:
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
sqrt(x^2)
.
До пізнього date
терміну , але ось рішення з використанням команди GNU, яка не базується на фіксованих 30 днях щомісяця, що всі відповіді, розміщені вище, вважали це, а відповідь Стіва .
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
Для поданого нижче вводу:
2015-09-12,2015-08-13
2017-02-12,2017-03-12
Вихід:
30
28
sqrt(x^2)
це добре, алеsqrt(x)^2
може ввести крихітні помилки, які можуть викликати сюрпризи. Для зайнятої скринькиawk
її потрібно будувати з увімкненою підтримкою з математики (не за замовчуванням, наприклад, у пакунках Debian).