for i in ...
faz um loop em uma lista de tokens delimitada por espaços em branco, não em uma lista de tokens delimitada por nova linha. O espaço e a nova linha são caracteres de espaço em branco e, portanto, são considerados delimitadores.
Considere:
while read line; do
echo $line
done < data.txt
read irá, por padrão, ler até uma nova linha e armazenar o que lê na variável dada.