Câu trả lời:
Bạn có thể định nghĩa các hàm awk
như:
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
Thủ thuật phổ biến cho loại tình huống này là sử dụng căn bậc hai của hình vuông:
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
sqrt(x^2)
.
Đến muộn, nhưng đây là một giải pháp sử dụng date
lệnh GNU không dựa trên 30 ngày cố định mỗi tháng mà tất cả các câu trả lời được đăng ở trên đều coi đó là câu trả lời của 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
Đối với đầu vào dưới đây:
2015-09-12,2015-08-13
2017-02-12,2017-03-12
Đầu ra là:
30
28
sqrt(x^2)
là tốt, nhưngsqrt(x)^2
có thể giới thiệu các lỗi nhỏ có thể gây ra sự ngạc nhiên. Đối với busyboxawk
, nó cần được xây dựng với tính năng hỗ trợ toán học được bật (không phải mặc định trong các gói Debian).