How to parse a string efficiently

I am new to the boards and to shell programming and have a requirement to name new files received with a unique sequence number. I need to look at a particular file pattern that exists and then to increment a sequence by 1 and write the new file.

Example of file names and sequence #

part1_part2_part3_datesequence.dat
or
part1_part2_part3_part4_datesequence.dat

the sequence is a 6 digit right justified 0 filled number attached to the date - 20080501000001.dat, but may be the 4th, 5th, 6th or 7th token of the filename.

I have a script that creates the new files, but I am having trouble with how to efficiently extract the sequence number in order to increment it by 1 for a given file pattern and date and then write the new file.

Any help would be appreciated and I am trying to stay with shell or sed or awk as I do not have access to perl.

thanks!

Mike

one way:

#!bin/ksh

file="20080501000001.dat"
echo ${file%%.dat} | read seq
len=`expr length $seq`
let start=$len-14
seq=`expr $seq $start 14`
typeset -i num
echo ${seq##????????} | read num
echo $num

Jim,

Exactly what I needed - thanks!

Jim

Could you please breakdown how this works? I am changing up how I return the filenames and it is now not working. I am using an ls -a and get a fully qualified path, but your code above does not seem to handle this.

Thanks!

Mike

I just used your example filenames.

# this line was file="20080501000001.dat"
ls -rt  part1_*`date "+%Y%m%d`*.dat | tail -1 read file

This find the last occurrence of the file - ie. the highest sequence number for a file received today. the variable "file" is just the filename with the newsest sequence embedded in it.
Assuming I got your requirements.