Sort Date/Time in Unix
awk, bash, perl, sed, shell
Solution
Convert to Epoch Seconds for Sorting
Assuming that your data is stored in /tmp/foo, you can convert the timestamp into a numerically-sortable format with GNU date. For example:
date -f /tmp/foo '+%s' | sort |
while read; do
date -d "@$REPLY" "+%F %I:%M:%S %p"
done
This should correctly handle the sort in all cases, and especially the cases where all AM times should come before all PM times on the same date. For example, 12:01 AM is now listed before 10:00 PM.
Problem
Input ``` 2012-07-24 10:05:08 AM 2012-07-26 10:13:58 AM 2012-07-24 10:13:58 AM 2012-07-24 10:57:50 AM 2012-07-24 11:15:03 AM 2012-07-24 11:26:08 PM 2012-07-25 11:26:08 PM ``` Desired Output ``` 2012-07-24 10:05:08 AM 2012-07-24 10:13:58 AM 2012-07-24 10:57:50 AM 2012-07-24 11:15:03 AM 2012-07-24 11:26:08 PM 2012-07-25 11:26:08 PM 2012-07-26 10:13:58 AM ``` Code I tried ``` sort -t ":" -k 1 -k 2 -k 3 Input.txt | sort -t " " -k 3 ``` But I am not getting desired output. Can anyone suggest anything? I wrote a code... but still problem persists... Code ``` sed 's/ 12:/00:/g' Input.txt | sort -k 1,1 -k 3,3 -k 2,2 | sed 's/00:/12:/g' ``` First change 12:43:01 AM to 00:43:01 AM....and then apply sort command.