Sort files by date in filename


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sort files by date in filename
# 1  
Old 12-26-2011
Sort files by date in filename

Hi, I am a newbie to shell programming and I need some help in sorting a list of files in ascending order of date in the filenames.

The file format is always : IGL01_AC_D_<YYYYMMDD>_N01_01
For example, in a directory MyDirectory I have the following files:

Code:
IGL01_AC_D_20110712_N01_01.dat
IGL01_AC_D_20110615_N01_01.dat
IGL01_AC_D_20110914_N01_01.dat

I want to sort and process them in the following ascending order:
Code:
IGL01_AC_D_20110615_N01_01.dat
IGL01_AC_D_20110712_N01_01.dat
IGL01_AC_D_20110914_N01_01.dat

Can anyone please help me in achieving this?

I have try with ls comand which only sort the files according to the modification and creating date that UNIX assign to them but that not my goal. The goal is to sort by the date in the filename.
Thanking you in advance.

Last edited by radoulov; 12-26-2011 at 03:40 PM.. Reason: Code tags!
# 2  
Old 12-26-2011
Note that given the filename format the shell will sort the filenames as you want
(just try executing ls -1 *.dat or printf '%s\n' *.dat).
This User Gave Thanks to radoulov For This Post:
# 3  
Old 12-26-2011
Hello radoulov,
Thank you very much for your quick reply.
I have tested the code in your reply on my vmware machine for some files in the same format and indeed that really work!. Smilie

I will integrate this piece of code in my script tomorrow and test the whole code on my real UNIX machine.

---------- Post updated at 03:21 PM ---------- Previous update was at 03:07 PM ----------

Can you please advise how should the command be if for example the files are different like for example:

Code:
IGL01_AC_D_20110615_N01_01.dat
IGL01_AC_D_20110712_N01_02.dat 
IGL01_AC_D_20110914_N01_01.dat
IGL01_AC_D_20110702_N01_01.dat
IGL01_AC_D_20110302_N01_02.dat

and still i want to sort them by the date in the filename
Thank you.

Last edited by radoulov; 12-26-2011 at 04:38 PM..
# 4  
Old 12-26-2011
Code:
printf '%s\n' *.dat | sort -t_ -k4,4

This User Gave Thanks to radoulov For This Post:
# 5  
Old 12-27-2011
Many many thanks to you. That was the way I play with your above reply:
Infact on production the filename has the following format:

IGL01_AC_D_<YYYYMMDD>_<N01>_<01>.dat where all the paramaters in angular brakets can be changed. N01 becomes N02 etc, 01 becomes 02 03 etc and
<YYYYMMDD> also.
From your code, I undertstood that -k4,4 is the position in the filename on which I want to sort..am i right?

I used your above logic to sort the file on the three columns with :

Code:
ls IGL01*.dat | sort -t_ -k4,4 -k5,5 -k6,6

Works pretty good..thank you again very much Smilie

Last edited by radoulov; 12-27-2011 at 09:17 AM.. Reason: Code tags.
# 6  
Old 12-27-2011
Yes,
it works like this.

By the way, -k4,4 -k5,5 ... should be the default behavior,
thus in this case -k4 should be sufficient.
This User Gave Thanks to radoulov For This Post:
# 7  
Old 12-27-2011
So basically, you mean that even if I have for example the following files:

Code:
IGL01_AC_D_20110615_N01_01.dat
IGL01_AC_D_20110614_N02_01.dat
IGL01_AC_D_20110614_N01_01.dat
IGL01_AC_D_20110614_N01_02.dat

Code:
ls IGL01*.dat | sort -t_ -k4

will give the following result?

Code:
IGL01_AC_D_20110614_N01_01.dat
IGL01_AC_D_20110614_N01_02.dat
IGL01_AC_D_20110614_N02_01.dat
IGL01_AC_D_20110615_N01_01.dat

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sort log files based on numeric value in the filename

Hi, I have a list of log files as follows: name_date_0001_ID0.log name_date_0001_ID2.log name_date_0001_ID1.log name_date_0002_ID2.log name_date_0004_ID0.log name_date_0005_ID0.log name_date_0021_ID0.log name_date_0025_ID0.log .......................................... (4 Replies)
Discussion started by: alex2005
4 Replies

2. Shell Programming and Scripting

Find files greater than a particular date in filename.

I need a unix command which will find all the files greater that a particular date in the file name. say for example I have files like(filenaming cov : filename.YYDDMMSSSS.txt) abc.201206015423.txt abc.201207013456.txt abc.201202011234.txt abc.201201024321.txt efg.201202011234.txt... (11 Replies)
Discussion started by: lijjumathew
11 Replies

3. Shell Programming and Scripting

Bash script to sort files into folder according to a string in the filename

Hi all. I am very new to linux scripting and i have a task i can only solve with a script. I need to sort files base on the date string in their filenames and create a folder using the same date string then move the files to their respective folders. Scenario: Folder Path:... (1 Reply)
Discussion started by: ace47
1 Replies

4. Shell Programming and Scripting

URGENT!!! bash script to sort files into folder according to a string in the filename

Hi all. I am very new to linux scripting and i have a task i can only solve with a script. I need to sort files base on the date string in their filenames and create a folder using the same date string then move the files to their respective folders. Scenario: Folder Path:... (1 Reply)
Discussion started by: ace47
1 Replies

5. UNIX for Dummies Questions & Answers

sort files by numeric filename

dear all, i have .dat files named as: 34.dat 2.dat 16.dat 107.dat i would like to sort them by their filenames as: 2.dat 16.dat 34.dat 107.dat i have tried numerous combinations of sort and ls command (in vain) to obtain : 107.dat 16.dat 2.dat 34.dat (1 Reply)
Discussion started by: chen.xiao.po
1 Replies

6. Shell Programming and Scripting

Move files based on date in filename

I know this gets covered quite a bit in the forum and I think there is enough there for me to figure out how to do what I am trying to do, I just don't think I would do it very efficiently so I am going to ask the question... I have database log files with date and time stamps in the file like ... (7 Replies)
Discussion started by: slatoms
7 Replies

7. UNIX for Dummies Questions & Answers

Sort files by date, not showing files from today

Hi all, i'm new here in this forum. I really like the helpful answers in this forum. Here a short question. For a script i have to sort files by date and exclude the files of the actual date. Sorting the files by date and preparing the output for awk is done by this line: ls -l... (3 Replies)
Discussion started by: carlosdivega
3 Replies

8. Linux

sort files by date

Hi All, Sorry to throw this frequent question but I lost my notes on it. How do you list the files by date? I'm on red hat. Thanks in advance, itik (1 Reply)
Discussion started by: itik
1 Replies

9. Shell Programming and Scripting

Sort files by Date-timestamps available in filename & pick the sortedfiles one by one

Hi, I am new to Unix shell scripting. Can you please help me with this immediate requirement to code.. The requirement is as given below. In a directory say Y, I have files like this. PP_100000_28062006_122731_746.dat PP_100000_28062006_122731_745.dat PP_100000_28062006_122734_745.dat... (4 Replies)
Discussion started by: Chindhu
4 Replies

10. UNIX for Dummies Questions & Answers

Renaming files to have date/time in filename

I have a program that will export my data to a single file, but it assigns a file name that is overridden every time I run the program. I need to change the file name to have a sequential number in the filename. How do I rename a file so that the filename contains the system date and time. I want... (5 Replies)
Discussion started by: wayneb
5 Replies
Login or Register to Ask a Question