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 ...