Мне любопытно из вопроса решить проблему памяти с решением split
, но независимо от этого, этот альтернативный подход может быть полезен:
Вы могли бы использовать csplit
вместо split
для разделения такого файла.
Для csplit
нужно определить паттерн, определяющий, где разбивать, а в качестве разделителя можно использовать строки с одним номером - если вы знаете, что таких строк нет в комментариях.
Мне не понятно, в чем проблема с памятью, но использование другого инструмента может с этим справиться.
Но есть и преимущество в том, что команда становится проще, нет необходимости сначала получать число.
Команда будет что-то вроде:
csplit --elide-empty-files -n4 in.txt '/^[0-9]\+$/' '{*}'
у вас есть опечатка в строке 8 вашего скрипта, она должна быть:
читать имя каталога
{{1} } По этой причине вы выводите только «5», потому что $ dirname пусто.
Что происходит, когда вы читаете $ dirname
, оболочка расширяет '$ dirname' до пустого значения.
Также к сведению, всегда используйте двойные кавычки при заключении переменных.
Исправленный сценарий:
#!/bin/ksh
echo Enter the level of nesting
read lev
echo Enter the directory \( Enter the Absolute Path\)
read path
echo Enter the directory name
read dirname
cd $path
for((i=1;i<=$lev;i++));
do
mkdir "$dirname$i"
cd "$dirname$i"
done
echo "$dirname$i"