This is the format of my log file and parameters for log file are like
� 10 first characters: MSISDN
� 6 next characters: Hour
� 18 next characters: ID SA Source
� 18 next characters: ID SA Destination
I have 11 whitespaces in between my first and second colums.I need to cut fitst 10 char next 6 char and next 18 char(including white spaces) . and i tried follwing in my code
But i cant trim my whitespaces from log files . i need to take that also..
becos parameters are set like
� 10 first characters: MSISDN
� 6 next characters: Hour
� 18 next characters: ID SA Source
� 18 next characters: ID SA Destination
This characters includes white spaces also
Actually the log file is like 0608166896000001 in my first column 11 whitespaces and 3001339 in my second column( 3001339) then 11 whitespaces and
3204235 in my third coumn . ...
But while reading line by line using following code
while read data
do
echo data $data
ID_SA_SOURCE=`echo $data | cut -c17-35`
echo ID_SA_SOURCE $ID_SA_SOURCE
done < $TRACKING_LOGDIR/$listdata
I am not getting the 11 white spaces in "data" variable instead of i am getting only one space..i want 11whtespaces first and 3001339 value in my ID_SA_SOURCE variable....
You need to properly quote your variables when you echo them, otherwise the shell will trim whitespace. I'd advise against using echo at all, though.
But here's how to quote properly. To be a little bit on the safe side, I also zap IFS; I don't believe it's strictly necessary here, but it's a technique you should be aware of.
OLDIFS=$IFS
IFS='
' # just a newline, in single quotes
while read data
do
MSISDN="`echo "$data" | cut -c1-10`"
HOUR="`echo "$data" | cut -c11-16`"
ID_SA_SOURCE="`echo "$data" | cut -c17-35`"
ID_SA_DEST="`echo "$data" | cut -c36-54`"
done < $TRACKING_LOGDIR/$listdata
IFS=$OLDIFS
Having that out of the way, how about something like this?
awk '{ OFS=":"; print substr($0, 1, 10), substr($0, 11, 16),
substr($0, 17, 35), substr($0, 17, 35) }' $TRACKING_LOGDIR/$listdata |
while IFS=: read MSISDN HOUR ID_SA_SOURCE ID_SA_DEST; do
echo "'$HOUR': All your '$ID_SA_SOURCE' are '$ID_SA_DEST' to '$MSISDN'"
done