Skip blank lines when iterating through file line by line

Remove the blank lines first with sed.

for word in `sed '/^$/d' $inputfile`; do
    myarray[$index]="$word"
    index=$(($index+1))
done

Be more elegant:

echo "\na\nb\n\nc" | grep -v "^$"

cat $file | grep -v "^$" | next transformations...

cat -b -s file |grep -v '^$'

I know it's solved but, I needed to output numbered lines while ignoring empty lines, so I thought of putting it right here in case someone needs it. :)


Implement the same test as in your pseudo-code:

while read line; do
    if [ ! -z "$line" ]; then
        myarray[$index]="$line"
        index=$(($index+1))
    fi
done < $inputfile

The -z test means true if empty. ! negates (i.e. true if not empty).

You can also use expressions like [ "x$line" = x ] or test "x$line" = x to test if the line is empty.

However, any line which contains whitespace will not be considered empty. If that is a problem, you can use sed to remove such lines from the input (including empty lines), before they are passed to the while loop, as in:

sed '/^[ \t]*$/d' $inputfile | while read line; do
    myarray[$index]="$line"
    index=$(($index+1))
done

Tags:

Bash