Я написал рабочий сценарий bash, который зацикливает некоторые файлы на чтение их простого текста, изменяет его на sed
и заменяет строку в файле шаблона измененным текстом.
Я добился этого, избавившись sed
для заменяемой части (мне было довольно сложно использовать ее для многострочной подстановки в моем конкретном случае c).
awk
работала нормально до сих пор, когда я пытаюсь увеличить количество абзацев в файл (от 200 до 225). Я получаю сообщение об ошибке script.sh: line 11: /usr/bin/awk: Argument list too long
, и файл шаблона теперь прерывается намного раньше (открытие, 14 абзацев, закрытие), чем когда он работал (открытие, 200 абзацев, закрытие).
Почему это происходит? Как я могу решить эту проблему, возможно сохраняя awk
?
Почему awk
печатает только 14 абзацев вместо 200, которые он мог печатать раньше?
Почему set -e
не останавливает сценарий после этого? появляется ошибка?
Этот скрипт работает до тех пор, пока файл не станет слишком большим:
#!/bin/bash
set -e
cp template.bkp template.txt
for file in text/* ; do
modifiedText=$(sed '...' $file | fold -w 50 -s)
modifiedText+="
#REPLACESTRING"
awk -v modifiedText="$modifiedText" '{gsub("#REPLACESTRING", modifiedText, $0); print}' template.txt > template-tmp.txt && mv template-tmp.txt template.txt
done
awk '{gsub("#REPLACESTRING", "", $0); print}' template.txt > template-tmp.txt && mv template-tmp.txt template.txt
[...]
Файл шаблона выглядит следующим образом:
Opening
#REPLACESTRING
Closing