Разделить большой файл на несколько файлов, но без оператора case

Я новичок в сценариях bash, и я пытаюсь создать сценарий, который разбивает большой файл на несколько файлов. Мне удалось с оператором case, но как я могу сделать это без оператора case? Например, если у меня есть файл с 30 миллионами строк (некоторый файл базы данных). Заранее спасибо!

echo File which one you want to split
read pathOfFile
echo
countLines=`wc -l < $pathOfFile`
echo The file has $countLines lines
echo
echo In how many files do you want to split?
echo -e "a = 2 files\nb = 3 files\nc = 4 files\nd = 5 files\ne = 10 files\nf = 25 files"
read numberOfFiles
echo
echo The files name with should start:
read nameForFiles
echo

#Split the file
case $numberOfFiles in
a) split -l $(($countLines / 2)) $pathOfFile $nameForFiles;;
b) split -l $(($countLines / 3)) $pathOfFile $nameForFiles;;
c) split -l $(($countLines / 4)) $pathOfFile $nameForFiles;;
d) split -l $(($countLines / 5)) $pathOfFile $nameForFiles;;
e) split -l $(($countLines / 10)) $pathOfFile $nameForFiles;;
f) split -l $(($countLines / 25)) $pathOfFile $nameForFiles;;
*) echo Invalid choice.
esac
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
1
0
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете просто использовать массив для хранения значений, а затем преобразовать свой символ в целое число для использования в качестве индекса:

# ...

z=('2' '3' '4' '5' '10' '25')
x=$(( $(printf '%d' "'$numberOfFiles") -97 ))

if  [[ $x -lt "${#z[@]}" ]] && [[ $x -ge '0' ]] ; then
    split -l $(($countLines / ${z[x]})) $pathOfFile $nameForFiles
else
    echo "Invalid choice"
fi

Как вы можете видеть, просто преобразуйте символ в ascii, затем минус 97 обеспечит соответствие строк индекса в пределах диапазона массива z.

Я нашел другой способ решить эту проблему, проверьте ниже:

echo File which one you want to split
read pathOfFile
echo
countLines=`wc -l < $pathOfFile`
echo The file has $countLines lines
echo
echo In how many files do you want to split?
read numberOfFiles
echo
echo The files name with should start:
read nameForFiles
echo

#Split the file
if [[ -n ${numberOfFiles//[0-9]/} ]];
        then
        echo You type something else than a number. - Bye
        exit 1
else
        split -l $(($countLines / $numberOfFiles)) -a 3 -d $pathOfFiles $nameForFiles
fi

Хороший подход к подсказке номера. В этом операторе «if» не забудьте поставить закрывающую скобку в регулярном выражении после [0-9.

Biped Phill 26.11.2022 20:18

Другие вопросы по теме