Как разбить строчки в файле на блоки?
Ты разбиваешь сперва файл на блоки, затем действия выполняешь не с блоками а со строкам в блоках.
Зачем тогда делить на блоки? считывай сразу построчно и работай со строками.
Ну или делай, например, два цикла:

while true; do
  STR=""
  for a in 1 2 3 4;do
    read
    STR="$STR $REPLY"
    [[ -z "$REPLY" ]] && break 2
    done
  echo "[$STR]"
done < file.dat
result:
[ test1; test2; test3; test4;]
[ read1; read2; read3; read4;]
Ну, так ключевое слово прозвучало - "цикл".

В цикле по 4 строки удаляете/заменяете переносы строк и выполняете нужные операции. Намылить, смыть, повторить - и так до конца файла.