Sorting date field in unix
Chronicle's solution is close, but misses the AM/PM distinction, sorting 27-MAR-12 07.28.02.828746000 PM
before 27-MAR-12 10.28.14.797580000 AM
. This can be modified:
sort -t- -k 3.1,3.2 -k 2M -k 1n -k 3.23,3.24
But that is still very fragile. It would be much better to convert the dates to an epoch time and compare numerically.
Try this :
Input.txt
09-APR-12 04.08.43.632279000 AM 19-MAR-12 03.53.38.189606000 PM 19-MAR-12 03.56.27.933365000 PM 19-MAR-12 04.00.13.387316000 PM 19-MAR-12 04.04.45.168361000 PM 19-MAR-12 03.54.32.595348000 PM 27-MAR-12 10.28.14.797580000 AM 28-MAR-12 12.28.02.652969000 AM 27-MAR-12 07.28.02.828746000 PM
Code
sort -t "-" -k 3 -k 2M -nk 1 Input.txt
Output
19-MAR-12 03.53.38.189606000 PM19-MAR-12 03.54.32.595348000 PM19-MAR-12 03.56.27.933365000 PM19-MAR-12 04.00.13.387316000 PM19-MAR-12 04.04.45.168361000 PM27-MAR-12 07.28.02.828746000 PM27-MAR-12 10.28.14.797580000 AM28-MAR-12 12.28.02.652969000 AM09-APR-12 04.08.43.632279000 AM