Sort help: How to sort collected 'file list' by date stamp :

Hi Experts,

I have a filelist collected from another server , now want to sort the output using date/time stamp filed.

  • Filed 6, 7,8 are showing the date/time/stamp.

Here is the input:

#----------------------------------------------------------------------
-rw-------   1 root       root        304182 Feb 12 18:09 /etc/cmconfig
-rw-------   1 root       root        194056 Feb 12 17:41 /etc/cmconfig
-rw-------   1 root       sys         125844 Oct 14 17:57 /etc/cmconfig
-rw-------   1 root       sys         131010 Oct 14 17:57 /etc/cmconfig
-rw-------   1 root       sys         131010 Oct 14 17:58 /etc/cmconfig
-rw-------   1 root       dba         468206 Feb 12 17:54 /etc/cmconfig
-rw-------   1 root       sys         327604 Jan 20 16:36 /etc/cmconfig
-rw-------   1 root       sys         428022 Jan 28 16:19 /etc/cmconfig
-rw-------   1 root       sys         554778 Jan 28 16:18 /etc/cmconfig
-rw-------   1 root       sys           3122 Dec  6 16:09 /etc/cmconfig
-rw-------   1 root       sys         955244 Dec  5 16:42 /etc/cmconfig
-rw-------   1 root       root        294330 Aug 20 15:58 /etc/cmconfig
-rw-------   1 root       users       295384 Aug 20 15:57 /etc/cmconfig
-rw-------   1 root       users       295384 Aug 20 15:57 /etc/cmconfig
-rw-------   1 root       root        177074 Jan  2 15:13 /etc/cmconfig
-rw-------   1 root       root         53754 Feb 11 14:10 /etc/cmconfig
-rw-------   1 root       sys          16512 Sep 26 14:11 /etc/cmconfig
-rw-------   1 root       root         46532 Oct 22 13:45 /etc/cmconfig
-rw-------   1 root       root        121888 Oct 22 13:47 /etc/cmconfig
-rw-------   1 root       root        223998 Feb  9 11:31 /etc/cmconfig
-rw-------   1 root       root        282906 Feb 10 10:17 /etc/cmconfig
-rw-------   1 root       root        167484 Feb 10 10:24 /etc/cmconfig
-rw-------   1 root       root        183984 Feb  9 10:43 /etc/cmconfig
-rw-------   1 root       sys          18620 Sep 26 10:15 /etc/cmconfig
-rw-------   1 root       sys         415972 Feb  4 09:30 /etc/cmconfig
-rw-------   1 root       sys           3122 Dec 12 09:04 /etc/cmconfig
-rw-------   1 root       users       424208 Dec  6 09:59 /etc/cmconfig
-rw-------   1 root       users       423180 Dec  6 09:54 /etc/cmconfig
-rw-------   1 root       users       423180 Dec  6 09:53 /etc/cmconfig
-rw-------   1 root       sys         423180 Dec  6 09:52 /etc/cmconfig
-rw-------   1 root       sys          20624 Feb  4 08:59 /etc/cmconfig
-rw-------   1 root       root         71022 Nov 19 08:25 /etc/cmconfig
-rw-------   1 root       sys         184478 Jan 29 08:20 /etc/cmconfig
-rw-------   1 root       sys         431432 Oct 18 08:42 /etc/cmconfig
#----------------------------------------------------------------------

Want the output like this:

-rw-------   1 root       root        177074 Jan  2 15:13 /etc/cmconfig
-rw-------   1 root       sys         327604 Jan 20 16:36 /etc/cmconfig
-rw-------   1 root       sys         428022 Jan 28 16:19 /etc/cmconfig
-rw-------   1 root       sys         554778 Jan 28 16:18 /etc/cmconfig
-rw-------   1 root       sys         184478 Jan 29 08:20 /etc/cmconfig
-rw-------   1 root       sys         415972 Feb  4 09:30 /etc/cmconfig
-rw-------   1 root       root        223998 Feb  9 11:31 /etc/cmconfig

Thanks.,

Try this

awk 'BEGIN{mon["Jan"]=1;mon["Feb"]=2;mon["Mar"]=3;mon["Apr"]=4;mon["May"]=5;mon["Jun"]=6;mon["Jul"]=7;mon["Aug"]=8;mon["Sep"]=9;mon["Oct"]=10;mon["Nov"]=11;mon["Dec"]=12;} 
{ split($8, hhmm, /:/); format="2012 "mon[$6]" "$7" "hhmm[1]" "hhmm[2]" 00 00"; t=mktime(format); a[t]=$0; b[++j]=t; } 
END{n=asort(b); for(i=1;i<=n;i++){print a[b]}}' input_file 

--ahamed

---------- Post updated at 04:51 PM ---------- Previous update was at 04:49 PM ----------

Updated the code : there was a syntax error.

--ahamed

1 Like

Hi rveri,
By what logic were the following lines deleted from your input file:

#----------------------------------------------------------------------
-rw-------   1 root       users       295384 Aug 20 15:57 /etc/cmconfig
-rw-------   1 root       users       295384 Aug 20 15:57 /etc/cmconfig
-rw-------   1 root       root        294330 Aug 20 15:58 /etc/cmconfig
-rw-------   1 root       sys          18620 Sep 26 10:15 /etc/cmconfig
-rw-------   1 root       sys          16512 Sep 26 14:11 /etc/cmconfig
-rw-------   1 root       sys         125844 Oct 14 17:57 /etc/cmconfig
-rw-------   1 root       sys         131010 Oct 14 17:57 /etc/cmconfig
-rw-------   1 root       sys         131010 Oct 14 17:58 /etc/cmconfig
-rw-------   1 root       sys         431432 Oct 18 08:42 /etc/cmconfig
-rw-------   1 root       root         46532 Oct 22 13:45 /etc/cmconfig
-rw-------   1 root       root        121888 Oct 22 13:47 /etc/cmconfig
-rw-------   1 root       root         71022 Nov 19 08:25 /etc/cmconfig
-rw-------   1 root       sys         955244 Dec  5 16:42 /etc/cmconfig
-rw-------   1 root       sys         423180 Dec  6 09:52 /etc/cmconfig
-rw-------   1 root       users       423180 Dec  6 09:53 /etc/cmconfig
-rw-------   1 root       users       423180 Dec  6 09:54 /etc/cmconfig
-rw-------   1 root       users       424208 Dec  6 09:59 /etc/cmconfig
-rw-------   1 root       sys           3122 Dec  6 16:09 /etc/cmconfig
-rw-------   1 root       sys           3122 Dec 12 09:04 /etc/cmconfig
-rw-------   1 root       sys          20624 Feb  4 08:59 /etc/cmconfig
-rw-------   1 root       root        183984 Feb  9 10:43 /etc/cmconfig
-rw-------   1 root       root        282906 Feb 10 10:17 /etc/cmconfig
-rw-------   1 root       root        167484 Feb 10 10:24 /etc/cmconfig
-rw-------   1 root       root         53754 Feb 11 14:10 /etc/cmconfig
-rw-------   1 root       root        194056 Feb 12 17:41 /etc/cmconfig
-rw-------   1 root       dba         468206 Feb 12 17:54 /etc/cmconfig
-rw-------   1 root       root        304182 Feb 12 18:09 /etc/cmconfig
#----------------------------------------------------------------------

If you are sorting by increasing values of date and time, by what logic should the line:

-rw-------   1 root       sys         554778 Jan 28 16:18 /etc/cmconfig

appear after the line:

-rw-------   1 root       sys         428022 Jan 28 16:19 /etc/cmconfig

in your wanted output?

Don,
That was a mistake trying to get the lines sorted manualy by copy paste:

-rw-------   1 root       sys         428022 Jan 28 16:19 /etc/cmconfig
-rw-------   1 root       sys         554778 Jan 28 16:18 /etc/cmconfig

should be

-rw-------   1 root       sys         554778 Jan 28 16:18 /etc/cmconfig
-rw-------   1 root       sys         428022 Jan 28 16:19 /etc/cmconfig

So the output wanted is as below: (corrected now):

-rw-------   1 root       root        177074 Jan  2 15:13 /etc/cmconfig
-rw-------   1 root       sys         327604 Jan 20 16:36 /etc/cmconfig
-rw-------   1 root       sys         554778 Jan 28 16:18 /etc/cmconfig
-rw-------   1 root       sys         428022 Jan 28 16:19 /etc/cmconfig
-rw-------   1 root       sys         184478 Jan 29 08:20 /etc/cmconfig
-rw-------   1 root       sys         415972 Feb  4 09:30 /etc/cmconfig
-rw-------   1 root       root        223998 Feb  9 11:31 /etc/cmconfig

Sorry for the confusion that had with the wrong desired output.

  • Ahamed Thanks a lot , ll try and update.

---------- Post updated at 10:12 PM ---------- Previous update was at 09:19 PM ----------

Ahamed, your code works awesome, and like charm,
Thanks a lot.