Date format to be changed from DDMMYYYY to YYYYMMDD

My requirement is:- there will be files at a location each day with the date format DDMMYYYY.

Novawise_Activity_Call_Notes_04022013.txt
Novawise_Activity_Inbound_04022013.txt
Novawise_Activity_Inbound_05022013.txt
Novawise_Activity_Call_Notes_05022013.txt
Novawise_Activity_Call_Notes_06022013.txt
Novawise_Activity_Inbound_06022013.txt

Now in another file we store the last run date (LAST_DATE.TXT) in the format 20130405(YYYYMMDD). The current value is 20130405.

I want to pick up only the files for the 6th and not the 4th and the 5th. And then store the date 06022013 (from the file) into the LAST_DATE.TXT file in the format 20130406.
Hence i would process each day only those files which are latest and after the last run date.

Please let me know how this can be done.

As your specification is utterly vague, it's difficult to suggest a solution. I'd propose you use sed or awk to transpose the single elements of your date field.

in order to find out the date of the files i have used the below code

ls|rev|cut -d "." -f2|cut -d "_" -f1|rev

this gives me the dates of all the files in the format ddmmyyyy.

now if i can change this to YYYYMMDD then my problem is solved. I would be able to bring the files which have this above calculated date greater than the last run date.
can this be done??

---------- Post updated at 01:27 PM ---------- Previous update was at 01:17 PM ----------

if the date can be changed to YYYYMMDD then i can use the code below to bring the relative files.

set -vx
TARGET_DIR=$2
SOURCE_DIR=$1
LOGDIR=/info_d05/visage/SrcFiles/IQAlign/Log_Files
b=`cat $LOGDIR/last_date.txt`
for i in $SOURCE_DIR/Novawise*
do
 fname=`basename $i`
 p=`echo $fname|rev|cut -d "." -f2|cut -d "_" -f1|rev|something`
  if [ $p -gt $b ]
  then
   cp $SOURCE_DIR/$fname $TARGET_DIR/
  fi
  
done

the something part needs to be completed...

This is just a crude suggestion; use it as a starting point:

$ ls | awk -F[_.] '{print substr($(NF-1),5,4) substr($(NF-1),3,2) substr($(NF-1),1,2)}'
20130204
20130204
20130205
20130205

or:

ls | awk -F_ '{$NF= substr($NF,5,4) substr($NF,3,2) substr($NF,1,2) substr($NF,9)}1' OFS="_"

EDIT: added the ls | to the second proposal.

well the first one worked perfectly. but the second one did not..i am running the entire script and would let u know the outcome.i am using the first one. But i didn't understand the functioning. can you please explain how this worked?

You have to prepend whatever input you produce to the second one, of course, like the ls | used above. I added it to the code.

The first code breaks the input line at _ and . as told by the field separator, set with -F . $NF is the last field ("txt"), $(NF-1) the before last field containing the date string. The use of the substr function is self explanatory, I think.
The second works similarly, but leaves the .txt extension intact.

well thanks a lot for the help...the code works perfectly...this was a part of the huges script in which i was struck...now the entire thing is working as expected..i had little knowledge of awk programming so didn't understand it in the beginning...can you help me out with a good pdf or something to read from and understand awk and nawk...would appreciate your help....thanks..

Check this Awk tutorial
Awk - A Tutorial and Introduction - by Bruce Barnett

You've joined in here, read the man pages, and try to understand or even improve the suggestions given.