Wednesday, July 23, 2008

Bash for-loop should ignore space-characters

If you wanna to someting like this:

 

for I in $(zgrep -H “from=<test@google.com>” /var/logs/*.gz 2>/dev/null)
do
  LOG_FILE=”`echo $I | cut -d ‘:’ -f 1`”
  DATETIME=”`echo $I | cut -d ‘:’ -f 2-4 | cut -d ‘ ‘ -f 1-3`”
  MAILID=”`echo $I | cut -d ‘:’ -f 5 | cut -d ‘ ‘ -f 2`”
  RECIPIENT_ADDR=”`zgrep $MAILID $LOG_FILE | grep ‘to=’ | cut -d ‘<’ -f 2 | cut -d ‘>’ -f 1`”
  echo “$DATETIME $RECIPIENT_ADDR”
done

You will notice sooner or later that this doesn’t work this way: The for-loop doesn’t only treat line-breaks as a new element but also space-characters. Well, how can that be solved, fast and easy. This way:

 

zgrep -H “from=<test@google.com>” /var/logs/*.gz 2>/dev/null | while read I
do
  LOG_FILE=”`echo $I | cut -d ‘:’ -f 1`”
  DATETIME=”`echo $I | cut -d ‘:’ -f 2-4 | cut -d ‘ ‘ -f 1-3`”
  MAILID=”`echo $I | cut -d ‘:’ -f 5 | cut -d ‘ ‘ -f 2`”
  RECIPIENT_ADDR=”`zgrep $MAILID $LOG_FILE | grep ‘to=’ | cut -d ‘<’ -f 2 | cut -d ‘>’ -f 1`”
  echo “$DATETIME $RECIPIENT_ADDR”
done

Posted by schmidi2 at 16:31:59 | Permalink | No Comments »