I need to convert file full of lines like this:
# 2007 4 29 10 1 17.98 blah other stuff
into lines formatted like this
2007.04.29.10.01.17
The original line is space delimited, and when a one's place digit number appears (such as 4) it gets listed as ' 4'. When I convert it, I need to be able to change it to '04'. Thus there are spaces that delimit the file, AND spaces that are placeholders for leading zeros.
I need to write a shell script to make that conversion. I tried using the cut command because each character stays in the same exact place, so the 7th char is always a delimiting space and the 8th char is always the ten's digit, or a space that should be a leading zero. However I soon discovered that it treats two spaces as one, which totally throws off the count (Since sometimes I have ' 4' and sometimes I will have '14'.
So: I need a way to read and convert this file, either using cut, or some other method (awk?) that will allow me to do this. Either a way to modify my current code (below) or another approach that would work a lot better would be much appreciated.
Just for reference, my present code is below:
while read LINE
do
#IF line starts with '#', then
if [[ $LINE == "#"* ]]; then
#123456789012345678901
# 2008 12 26 11 26 20.36
# 2007 5 10 1 8 10.52
#GET 4 digit year
LINEyear=$(echo $LINE | cut -c3-6)
#GET 2 digit month
if [ $(echo $LINE | cut -c8-8) == " " ]; then
LINEmonth=0$(echo $LINE | cut -c8-9)
else
LINEmonth=$(echo $LINE | cut -c8-9)
fi
#GET 2 digit day
if [ $(echo $LINE | cut -c11-11) == " " ]; then
LINEday=0$(echo $LINE | cut -c11-12)
else
LINEday=$(echo $LINE | cut -c11-12)
fi
#GET hour, min, sec, (Removed to save space)
LINEnew=$LINEyear.$LINEmonth.$LINEday.$LINEhour.$LINEmin.$LINEsec
echo $LINEnew
fi
done