ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Как использовать команду readarray для чтения 2D-массива в Bash

Как использовать команду readarray для чтения 2D-массива в Bash

Bash — это популярный язык сценариев оболочки, используемый в операционных системах Linux и Unix. Он предоставляет богатый набор команд и функций, упрощающих автоматизацию повторяющихся задач. «readarray» — одна из самых полезных команд в Bash. С помощью этой команды строки из файла могут быть прочитаны в двумерный массив. В этом посте мы рассмотрим, как читать строки из файла в 2D-массив с помощью команды Bash «readarray».

 

Использование «readarray» в Bash

Команда readarray считывает строки из файла или стандартного ввода и присваивает их массиву. Синтаксис использования readarray следующий:

readarray [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] array

 

Опции, доступные для команды readarray:

 

Вот пример использования 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 для чтения строк из файлов и преобразования их в двумерные массивы.

Exit mobile version