@perrfect

Как разбить строчки в файле на блоки?

Добрый день.
Кто может подсказать как с помощью bash, разбить данные на блоки и дальше с этими блоками выполнять какие-то действия?
Например есть 100 строк в файле, нужно разбить этот файл на блоки, по 4 строки в каждом, и дальше по очереди - циклом, выполнить для каждой строчки в блоке, например команду echo.

Пример файла:
test1;
test2;
test3;
test4;
read1;
read2;
read3;
read4;
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Ты разбиваешь сперва файл на блоки, затем действия выполняешь не с блоками а со строкам в блоках.
Зачем тогда делить на блоки? считывай сразу построчно и работай со строками.
Ну или делай, например, два цикла:

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;]
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Дело в том что bash сам по себе не является языком программирования. Он - просто связующий клей который вызывает внешние утилиты. Поэтому если у вас задача серъезная - то берите Perl/Python. Там есть сильные средства для процессинга текста и отчотов.

Bash подойдет только до первого out of memory как только у вас зайдет файл превышающий оперативку. Или просто зайдет "технически"-нетекстовый файл где строки будут сверх-длинные или просто вызывающие побочные эффекты. Обработать такую ситуацию в ЯП - нормально а в баше - сложно.
Ответ написан
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Ну, так ключевое слово прозвучало - "цикл".

В цикле по 4 строки удаляете/заменяете переносы строк и выполняете нужные операции. Намылить, смыть, повторить - и так до конца файла.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
скрипты не нужны, добавь разделители регуляркой https://regex101.com/r/cw8QJE/1
как-то так
sed -e "s/pattern/result/" <file list>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы