जवाबों:
आप इस 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)।
दूसरा रास्ता:
awk -F'[-,]' '{d=360*($4-$1)+30*($5-$2)+($6-$3);print (d>0)?d:-d}'
देर से, लेकिन यहां जीएनयू 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, यह सक्षम होना चाहिए गणित समर्थन के साथ (उदाहरण के लिए डेबियन पैकेज में डिफ़ॉल्ट नहीं)।