Вы можете использовать бинарный поиск, только если файл отсортирован.
Вам не нужно читать весь файл в память;Вы можете обрабатывать его построчно:
while read line
do
....
done <$filename
И: Да, я лично не буду использовать сценарии оболочки для такого рода проблем, но это, конечно, дело вкуса.