Я новичок в сценариях оболочки. Я пытаюсь перебрать файлы журналов в среде Linux с помощью сценария оболочки. Вот мой код:
while read p; do
head=${p:0:250}
#some code here#
done < ./log.txt
Я беру только первые 250 символов в переменную для обработки в цикле. Строки в файле журнала могут быть огромными, а сам файл - почти 5 ГБ. Когда я запускаю приведенный выше код в нескольких строках, я получаю следующую ошибку:
xrealloc: cannot allocate 18446744071562068080 bytes (36864 bytes allocated)
Есть ли способ, которым я могу получить только часть строки вместо всей строки во время итерации? или есть какой-то другой лучший способ добиться того, что я пытаюсь сделать?
EDIT:
Когда я запускаю скрипт с -x
, я вижу, что скрипт некоторое время останавливается на read p
, а затем я получаю сообщение об ошибке. Я думаю, что он пытается загрузить всю строку, прежде чем продолжить, и это вызывает проблему.
Я присваиваю первые 250 символов переменной ($head
), чтобы впоследствии можно было разбить эту переменную на массив и выполнить некоторые операции при выполнении итерации по этому массиву. Мне не нужна переменная, пока я могу получить доступ к первым 250 символам из строки.
Любая помощь будет принята с благодарностью. Спасибо.