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