উত্তর:
আপনি এখানে ফাংশনগুলি সংজ্ঞায়িত করতে 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কমান্ড ব্যবহার করে একটি সমাধান দেওয়া হয়েছে যা প্রতি মাসে নির্দিষ্ট 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, এটি গণিত সমর্থন সক্ষম করে তৈরি করা দরকার (উদাহরণস্বরূপ ডেবিয়ান প্যাকেজগুলিতে ডিফল্ট নয়)।