Вот более простой пример, иллюстрирующий проблему:
$ cat input.txt
line one
line two
line three
$ for word in $(cat input.txt) ; do echo $word ; done
line
one
line
two
line
three
$(cat input.txt)
разбивает входные данные на пробелы. (Между прочим, в bash вы можете заменить это на$(<input.txt)
).
Вы можете использовать вместо read
встроенную команду -в команду:
$ while read line ; do echo "$line" ; done < input.txt
line one
line two
line three
(Поскольку вы все равно используете awk, вы можете переписать все это на awk или на каком-то другом языке сценариев.)