Sorting of YYYY-MM-DD


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sorting of YYYY-MM-DD
# 1  
Old 07-28-2014
Sorting of YYYY-MM-DD

Hi ,

I have a script which basically reports the following criteria when run with a directory as an argument

Code:
Filecount    size   Directory name owner  group owner    last modified time

Example entry

1       100189 bytes      97.8408 KB    0.0955477 MB    /var/log/mongo          mongod mongod   2013-10-22

Now I'm trying to sort the output of the script as per the last modified time stamp ( I'm testing ,thats the reason Im awking the 11 field )


Code:
[root@#### bin]# sh report.sh -d /var/log  | sort -n -k 11.4 -k 11.5 -k 11.9  -k 11 | awk '{print $11}'

Well my sort command is working on YYYY-MM-DD format OK, how ever it is not sorting DD properly

Following is the sample output and the ones in bold are wrong

Code:
2012-08-31
2012-08-31
2013-02-17
2013-02-28
2013-02-28
2013-02-28
2013-02-28
2013-02-21
2013-04-23
2013-05-21
2013-10-22
2014-03-18
2014-04-27
2014-07-25
2014-07-29
2014-07-27
2014-07-27
2014-07-29
2014-07-05
2014-07-24
2014-07-28
2014-07-25

How do I sort correctly

Thanks in advance
# 2  
Old 07-28-2014
you're trying too hard. perhaps:

Code:
sh report.sh -d /var/log  | awk '{print $11} | sort -n'

well, anyway, i couldn't reproduce your output.. sort -k11n should be enough though.
# 3  
Old 07-28-2014
Quote:
Originally Posted by neutronscott
you're trying too hard. perhaps:

Code:
sh report.sh -d /var/log  | awk '{print $11} | sort -n'

well, anyway, i couldn't reproduce your output.. sort -k11n should be enough though.
You're still trying too hard, as long as you have YYYYMMDD or YYYY-MM-DD or YYYY/MM/DD you don't need -n and when you have non-numeric characters in the string (in this case the minus-signs separating month and day), you don't want the -n. And the last single quote is in the wrong spot. For this you just need:
Code:
sh report.sh -d /var/log  | awk '{print $11}' | sort

or from the original post:
Code:
sh report.sh -d /var/log  | sort -k 11,11 | awk '{print $11}'

But, rather than counting fields, in this case I'd be tempted to use:
Code:
sh report.sh -d /var/log  | awk '{print $NF}' | sort

# 4  
Old 07-31-2014
Thank you Don

I have used

Code:
awk '{print $NF}' | sort

works absolutely fine !

However when I use it with the collective output it does not.

Example

Code:
 18      9150123 bytes      8935.67 KB    8.72624 MB     /var/log/sa     root   root     2014-07-31
 6       53170 bytes      51.9238 KB    0.0507069 MB     /var/log/xen    root   root     2014-07-25
 0       0 bytes      0 KB    0 MB       /var/log/xen/console    root   root     2013-05-21
 33      13332227 bytes      13019.8 KB    12.7146 MB    /var/log/nmon   nobody nobody   2014-07-31
 0       0 bytes      0 KB    0 MB       /var/log/squid          squid  squid    2010-03-31
 0       0 bytes      0 KB    0 MB       /var/log/iptraf         root   root     2007-03-14
 1       1448 bytes      1.41406 KB    0.00138092 MB     /var/log/mail   root   root     2011-08-11
 3       0 bytes      0 KB    0 MB       /var/log/news   news   news     2012-08-31
 0       0 bytes      0 KB    0 MB       /var/log/news/OLD       news   news     2010-01-27
 1       100189 bytes      97.8408 KB    0.0955477 MB    /var/log/mongo          mongod mongod   2013-10-22

Any ideas
#################################################################################################### #################################

Found what works for me

Code:
[root@#####bin]# sh get.sh -d /var/log  | sort -s -k 11.1,11.4 -k 11.6,11.7 -k 11.9,11.10 -k11.10 | awk '{print $11}'
2007-03-14
2007-11-11
2007-11-11
2009-01-21
2009-09-20
2010-01-27
2010-03-31
2011-08-11
2012-08-31
2012-08-31
2012-08-31
2013-02-17
2013-02-21
2013-02-28
2013-02-28
2013-02-28
2013-02-28
2013-04-23
2013-05-21
2013-10-22
2014-03-18
2014-04-27
2014-07-05
2014-07-24
2014-07-25
2014-07-25
2014-07-27
2014-07-27
2014-07-31
2014-07-31
2014-07-31


Many thanks

Last edited by maverick_here; 07-31-2014 at 05:51 AM.. Reason: Found solution
# 5  
Old 07-31-2014
When I feed the input shown in your last message into the pipeline:
Code:
awk '{print $NF}' | sort

I get the output:
Code:
2007-03-14
2010-01-27
2010-03-31
2011-08-11
2012-08-31
2013-05-21
2013-10-22
2014-07-25
2014-07-31
2014-07-31

which looks like the correct output to me.

I have no idea how you got 31 lines of output from those 10 input lines???
# 6  
Old 07-31-2014
I believe he is trying to sort all the data, and just extracting the list of dates to make it easier to check...

What separator does your data use? Tabs, or multiple spaces between elements?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Date format YYYY/MM/DD to DD/MM/YYYY

I am getting output of YYYY-MM-DD and want to change this to DD/MM/YYYY. When am running the query in 'Todd' to_date(column_name,'DD/MM/YYYY') am getting the required o/p of DD/MM/YYYY, But when am executing the same query(Netezza) in linux server(bash) am getting the output of YYYY-MM-DD file... (3 Replies)
Discussion started by: Roozo
3 Replies

2. UNIX for Dummies Questions & Answers

Epoch date to YYYY/MM/DD or MM/DD/YYYY

I've seen a lot of posts on this and have tried the following: echo 1257000000| perl -e '($d,$m,$y)=(localtime(time-86400));$m+=1;$y+=1900;printf "$y/$m/$d\n";' But I am unable to convert a past Epoch date into a format such as YYYY/MM/DD or MM/DD/YYYY. I am using bash and don't know... (4 Replies)
Discussion started by: newbie2010
4 Replies

3. Shell Programming and Scripting

Date conversion help from dd/mm/yyyy to dd/Mon/yyyy i.e. 28/10/2012 to 28/Oct/2012

Hi I have a problem with Date format in my code. 1st I am trying to convert today's date to yesterday's using YESTERDAY3=`perl -e '@y=localtime(time()-86400); printf "%04d/%02d/%02d",$y+1900,$y+1,$y;$y;'` And once it is done I am trying to using the yesterday date in a grep command to... (3 Replies)
Discussion started by: nithinankam
3 Replies

4. Shell Programming and Scripting

Converting date DD MM YYYY to DD MON YYYY

Hello, I am writing a script that parses different logs and produces one. In the source files, the date is in DD MM YYYY HH24:MI:SS format. In the output, it should be in DD MON YYY HH24:MI:SS (ie 25 Jan 2010 16:10:10) To extract the dates, I am using shell substrings, i.e.: read line ... (4 Replies)
Discussion started by: Adamm
4 Replies

5. Shell Programming and Scripting

change date format from yyyy/mm/dd to dd/mm/yyyy

(Attention: Green PHP newbie !) I have an online inquiry form, delivering a date in the form yyyy/mm/dd to my feedback form. If the content passes several checks, the form sends an e-mail to me. All works fine. I just would like to receive the date in the form dd/mm/yyyy. I tried with some code,... (6 Replies)
Discussion started by: keyboarder
6 Replies

6. Shell Programming and Scripting

convert d/m/yyyy to YYYY-MM-DD

My csv has data like this x,x,3452,2/18/1986,abc x,g,19711,1/24/1986,abc i want to replace date in the following format YYYY-mm-dd how do i convert using awk script ? (8 Replies)
Discussion started by: nuthalapati
8 Replies

7. Shell Programming and Scripting

Sed: zero-padding dates (or: convert d/m/yyyy to dd/mm/yyyy)

Hi all I have some pipe-separated data in the form: 5/12/2008 00:00:00|31/1/2009 00:00:00|SOMESTUFF|OTHERSTUFF 12/31/2008 00:00:00|15/1/2009 00:00:00|MORESTUFF|REMAININGSTUFF 1/1/1023 00:00:00|16/5/2047 00:00:00|THEREST|YETMORE I need to zero-pad the single-digit days and months, using... (3 Replies)
Discussion started by: jgrogan
3 Replies

8. Shell Programming and Scripting

Convert DD-MMM-YYYY to MM-DD-YYYY

I have a file which has 100k+ records like this abc,05-JUN-1974,def,lkj,aaa def,11-SEP-1975,ghj,dis,dea I want to convert ex 05-JUN-1974 to 06/05/1974 Please help me with awk script to convert the whole file into MM-DD-YYYY Thank you! (2 Replies)
Discussion started by: nuthalapati
2 Replies

9. Shell Programming and Scripting

converting the date field from dd/mm/yyyy to yyyy/mm/dd

How to convert the date field from dd/mm/yyyy to yyyy/mm/dd in unix my script will generate text file which have two fields one is date and another is name of the server for example this is sample date which I have to sort based on older to newer date the problem is when I found out sort will... (4 Replies)
Discussion started by: pareshan
4 Replies

10. Shell Programming and Scripting

Change Date from dd-mmm-yyyy to mm/dd/yyyy

I want to change a date from format dd-mmm-yyyy to mm/dd/yyyy. Is there a way to do this with sed or do you have to write a case statement to convert JAN to 01? Thanks (9 Replies)
Discussion started by: stringzz
9 Replies
Login or Register to Ask a Question