Bash — это популярный язык сценариев оболочки, используемый в операционных системах Linux и Unix. Он предоставляет богатый набор команд и функций, упрощающих автоматизацию повторяющихся задач. «readarray» — одна из самых полезных команд в Bash. С помощью этой команды строки из файла могут быть прочитаны в двумерный массив. В этом посте мы рассмотрим, как читать строки из файла в 2D-массив с помощью команды Bash «readarray».
Использование «readarray» в Bash
Команда readarray считывает строки из файла или стандартного ввода и присваивает их массиву. Синтаксис использования readarray следующий:
readarray [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] array
Опции, доступные для команды readarray:
- ‘-d DELIM’: устанавливает разделитель, используемый при разделении строк на элементы массива, и по умолчанию разделителем является символ новой строки.
- ‘-n COUNT’: указывает максимальное количество строк для чтения в массиве.
- ‘-O ORIGIN’ : устанавливает начальный индекс массива.
- ‘-s COUNT’: указывает количество строк, которые необходимо пропустить перед чтением в массив.
- ‘-t’: удаляет завершающий символ новой строки из каждой строки, считываемой в массив.
Вот пример использования readarray для чтения строк из файла в 2D-массив, и для этого мы создали testfile.txt, содержимое которого:
1 2 3 4 5 6 7 8 9
Итак, вот полный скрипт bash, демонстрирующий использование команды readarray:
#!/bin/bash # Считать строки из файла в массив readarray -t lines < testfile.txt # Объявить 2D-массив с 3 строками и 3 столбцами declare -A array # Перебрать строки и разбить каждую строку на элементы for i in "${!lines[@]}"; do IFS=' ' read -r -a elements <<< "${lines[i]}" for j in "${!elements[@]}"; do if [[ -n "${elements[j]}" ]]; then array[$i,$j]=${elements[j]} fi done done # вывести масив for ((i=0;i<3;i++)); do for ((j=0;j<3;j++)); do echo -n "${array[$i,$j]} " done echo done
Здесь сначала мы объявили двумерный массив с именем «array», а затем использовал команду «readarray» для чтения строк из файла с именем «testfile.txt» в массив «lines». Затем код перебирает массив «lines» и разбивает каждую строку на элементы с помощью команд «IFS» и «read».
После этого он сохраняет элементы в массиве 2D-массива, а затем использует команду чтения для разделения каждой строки на элементы. Теперь каждый элемент присваивается соответствующему элементу в массиве «array» и, наконец, печатается содержимое массива «array» с использованием вложенных циклов for.
andreyex@Destroyer: - File Edit View Search Terminal Help andreyex@Destroyer:-$ bash bashfile.sh 2 3 4 5 6 7 8 9 andreyex@Destroyer:-$
Заключение
Команда readarray упрощает работу с большими объемами данных в сценариях Bash. Следуя примерам, представленным в этой статье, вы можете начать использовать readarray в своих сценариях Bash для чтения строк из файлов и преобразования их в двумерные массивы.