How to convert strings like "19-FEB-12" to epoch date in UNIX
To convert a date to seconds since the epoch:
date --date="19-FEB-12" +%s
Current epoch:
date +%s
So, since your dates are in the past:
NOW=`date +%s`THEN=`date --date="19-FEB-12" +%s`let DIFF=$NOW-$THENecho "The difference is: $DIFF"
Using BSD's date
command, you would need
$ date -j -f "%d-%B-%y" 19-FEB-12 +%s
Differences from GNU date
:
-j
preventsdate
from trying to set the clock- The input format must be explicitly set with
-f
- The input date is a regular argument, not an option (viz.
-d
) - When no time is specified with the date, use the current time insteadof midnight.
Here's one way using GNU awk
. To run:
awk -f script.awk file
Contents of script.awk
:
BEGIN { n = systime() FS="-"}{ t = mktime(sprintf("%d %d %d %d %d %d", "20" $3, convert($2), $1, 0, 0, 0)) printf "%.1f days ago\n", (n - t) / 60 / 60 / 24}function convert(m) { return(((index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", m) - 1) / 3) + 1)}
Results:
358.6 days ago361.6 days ago1286.6 days ago