Поиск по сайту:
Нас делает счастливыми именно излишнее, а не то, что всем необходимо (Плутарх).

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

12.04.2023
Как использовать команду 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:

  • ‘-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

 

Читать  Как найти IP-адрес сайта в Linux

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Arkane Studios вместе с издателем Bethesda запустили интерактивную историю, которая одновременно является…

Спасибо!

Теперь редакторы в курсе.