जवाबों:
आप इस 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
, यह सक्षम होना चाहिए गणित समर्थन के साथ (उदाहरण के लिए डेबियन पैकेज में डिफ़ॉल्ट नहीं)।