How to Sort files on date field

:cool:
Hi all,

I have a pecular issue in sorting these files in Solaris environment.

All the below files are modified on November 4th, but I want to sort these files as per date column (eg: 01May07_1623 = ddmmmyy_hhmm)

Nov 4 18:27 SONYELEC00.GI22973.01May07_1623.gpg
Nov 4 18:27 SONYELEC00.GI22973.06Mar08_1504.gpg
Nov 4 18:27 SONYELEC00.GI22973.06Sep07_1900.gpg
Nov 4 18:27 SONYELEC00.GI22973.08Nov07_1900.gpg
Nov 4 18:27 SONYELEC00.GI22973.13Aug07_1900.gpg
Nov 4 18:27 SONYELEC00.GI22973.19Apr07_1733.gpg
Nov 4 18:27 SONYELEC00.GI22973.22Jan08_1900.gpg
Nov 4 18:27 SONYELEC00.GI22973.24Apr07_1757.gpg
Nov 4 18:27 SONYELEC00.GI22973.26Jun08_1900.gpg
Nov 4 18:27 SONYELEC00.GI22974.01May07_1623.gpg
Nov 4 18:27 SONYELEC00.GI22974.13Aug07_1900.gpg
Nov 4 18:27 SONYELEC00.GI22974.19Apr07_1733.gpg
Nov 4 18:27 SONYELEC00.GI22974.24Apr07_1757.gpg

Appreciate your quick support

Thanks,
Shiva
shivadba@xxxxxx

$ cat data
SONYELEC00.GI22973.01May07_1623.gpg
SONYELEC00.GI22973.06Mar08_1504.gpg
SONYELEC00.GI22973.06Sep07_1900.gpg
SONYELEC00.GI22973.08Nov07_1900.gpg
SONYELEC00.GI22973.13Aug07_1900.gpg
SONYELEC00.GI22973.19Apr07_1733.gpg
SONYELEC00.GI22973.22Jan08_1900.gpg
SONYELEC00.GI22973.24Apr07_1757.gpg
SONYELEC00.GI22973.26Jun08_1900.gpg
SONYELEC00.GI22974.01May07_1623.gpg
SONYELEC00.GI22974.13Aug07_1900.gpg
SONYELEC00.GI22974.19Apr07_1733.gpg
SONYELEC00.GI22974.24Apr07_1757.gpg
$
$ cat sorta
#! /usr/bin/ksh
Jan=01 Feb=02 Mar=03 Apr=04 May=05 Jun=06
Jul=07 Aug=08 Sep=09 Oct=10 Nov=11 Dec=12

while read name ; do
        base=${name%.gpg}
        hhmm=${base##*_}
        base=${base%_*}
        date=${base##*.}
        day=${date%?????}
        year=${date#?????}
        year=20${year}
        month=${date#??}
        month=${month%??}
        eval month=\$$month
        sort="${year}${month}${day}${hhmm}"
        echo $sort $name
done | sort | while read junk name ; do
        echo $name
done
exit 0
$
$
$ ./sorta < data
SONYELEC00.GI22973.19Apr07_1733.gpg
SONYELEC00.GI22974.19Apr07_1733.gpg
SONYELEC00.GI22973.24Apr07_1757.gpg
SONYELEC00.GI22974.24Apr07_1757.gpg
SONYELEC00.GI22973.01May07_1623.gpg
SONYELEC00.GI22974.01May07_1623.gpg
SONYELEC00.GI22973.13Aug07_1900.gpg
SONYELEC00.GI22974.13Aug07_1900.gpg
SONYELEC00.GI22973.06Sep07_1900.gpg
SONYELEC00.GI22973.08Nov07_1900.gpg
SONYELEC00.GI22973.22Jan08_1900.gpg
SONYELEC00.GI22973.06Mar08_1504.gpg
SONYELEC00.GI22973.26Jun08_1900.gpg
$

Hi Perderabo,

Thank you so much for your answer

I really appreciate your help

Thanks
Shiva

below perl may help you some

open FH,"<file";
@arr=<FH>;
close FH;
%hash=('Jan','01','Feb','02','Mar','03','Apr','04','May','05','Jun','06','Jul','07','Aug','08','Sep','09','Oct','10','Nov','11','Dec','12');
foreach(@arr){
	@temp=split("[.]",$_);
	my $str=buildnum($temp[2]);
	$res{$str}=$_;
}
foreach $key (sort keys %res){
	print $res{$key};
}
sub buildnum{
	my $str1=shift;
	$day=substr($str1,0,2);
	$mon=$hash{substr($str1,2,3)};
	$year="20".substr($str1,5,2);
	$time=substr($str1,-4);
	return $year.$mon.$day.$time;
}

Even Solaris sort has the M option:

sort -t. -k3.6,3.7 -k3.3,3.6M -k3 input

P.S. I believe I've already answered the same question in another thread ...