Добрый день.
Кто может подсказать как с помощью bash, разбить данные на блоки и дальше с этими блоками выполнять какие-то действия?
Например есть 100 строк в файле, нужно разбить этот файл на блоки, по 4 строки в каждом, и дальше по очереди - циклом, выполнить для каждой строчки в блоке, например команду echo.
Ты разбиваешь сперва файл на блоки, затем действия выполняешь не с блоками а со строкам в блоках.
Зачем тогда делить на блоки? считывай сразу построчно и работай со строками.
Ну или делай, например, два цикла:
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
Дело в том что bash сам по себе не является языком программирования. Он - просто связующий клей который вызывает внешние утилиты. Поэтому если у вас задача серъезная - то берите Perl/Python. Там есть сильные средства для процессинга текста и отчотов.
Bash подойдет только до первого out of memory как только у вас зайдет файл превышающий оперативку. Или просто зайдет "технически"-нетекстовый файл где строки будут сверх-длинные или просто вызывающие побочные эффекты. Обработать такую ситуацию в ЯП - нормально а в баше - сложно.
вы просто не умеете работать с баш. Это вполне нормальный язык программирования. Со своими нюансам, но ту же оперативку он может и вообще не есть. Нет никаких проблем с обработкой нетекстовых файлов, огромных файлов (при чтении по строкам, файл не хранится в памяти весь) или файлов с длинными строками.
Это просто подтверждает мой тезис о том что bash вообще ничего не умеет делать кроме как запускать процессы и принимать простейшие решения по коду ошибки.
mayton2019, вообще, bash это тьюринг-полный язык, в нем есть и условные операторы и переменные. И на нем можно написать практически что угодно (с оглядкой на производительность, конечно). Но зачем?
Stalker_RED, да да тоже самое доказывали по поводу BrainFuck. Но я писал в топике про оптимизацию использования памяти. Програмист - это не просто кодер на API. Это еще и хозяйственник. И если он видит разницу между потоковыми файловыми операциями и прочими и если у него есть возможность выбора - он выберет right way.
Если программисту пофиг - вы знаете. Когда пофиг - это зависающий Windows10 и Android в котором вечно не хватает оперативы сколько ее на ставь. И когда ругань пользователя направленна на это явление - она по своей природе направлена именно против таких программистов которым пофиг на каком инструменте делать split или sort текстового файла.
mayton2019, Вы плохой программист, если не умеете пользоваться разными инструментами.
Баш - отличный язык программирования, простой, с обратной совместимостью в десятилетия.
Его применение в хайлоаде - не нужно.
А вот в тех местах, где нужно сделать быстрое решение - это доступный из коробки инструмент, с мниимальными требованиями к навыкам программирования.
Кроме того, баш это не просто язык программирования, это еще и шелл.
Что же касается зависающей windows10 и Android, то оперативы там не хватает явно не из-за баша или повершелла, а из-за программистов как вы, которые тянут "настоящие языки программирования, фреймворки, библиотеки" и другую лабуду для того, чтобы распарсить построчно один файлик.
mayton2019, если нужно обрабатывать сотню тысяч таких файлов в день, то да я задумаюсь о производительности. Если нужно разово обработать три файлика, то мне все равно, выполнится это за 0.00001 секунду или за 0.5, например. Я буду выбирать по простоте написания.