ウェブサイト検索

Bashで2D配列を読み取るためのreadarrayコマンドの使用方法


Bashは、LinuxおよびUnixオペレーティングシステムで使用される人気のシェルスクリプト言語です。繰り返し作業を自動化するために便利なコマンドや機能が豊富に用意されています。「readarray」はBashの中で最も役立つコマンドの一つです。このコマンドを使用すると、ファイルの行を2次元配列に読み込むことができます。この記事では、Bashの「readarray」コマンドを使用して、ファイルの行を2次元配列に読み込む方法について説明します。

Bashでの‘readarray’の使用

「readarray」コマンドは、ファイルまたは標準入力から行を読み込み、それらを配列に割り当てます。「readarray」を使用するための構文は次のとおりです:

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

「readarray」コマンドで利用可能なオプションは次のとおりです:

‘-d DELIM’: 行を配列要素に分割する際に使用する区切り文字を設定します。デフォルトでは、区切り文字は改行文字です。

‘-n COUNT’: 配列に読み込む最大行数を指定します。

‘-O ORIGIN’: 配列の開始インデックスを設定します。

‘-s COUNT’: 配列に読み込む前にスキップする行数を指定します。

‘-t’: 配列に読み込まれた各行から、末尾の改行文字を削除します。

こちらは、ファイルから行を2D配列に読み込むために「readarray」を使用した例です。そのために、内容が以下のtestfile.txtを作成しました:

1 2 3
4 5 6
7 8 9

ここに ‘readarray’ コマンドの使用を示す完全な Bash スクリプトがあります:

#!/bin/bash
Read lines from a file into the array
readarray -t lines < testfile.txt
Declare a 2D array with 3 rows and 3 columns
declare -A array 
Iterate over the lines and split each line into elements
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
Print the array
for ((i=0;i<3;i++)); do
  for ((j=0;j<3;j++)); do
    echo -n "${array[$i,$j]} "
  done
  echo
done

ここでは最初に「array」と呼ばれる2D配列を宣言し、その後「readarray」コマンドを使用して「testfile.txt」というファイルから行を「lines」配列に読み込みました。次に、コードは「lines」配列を反復処理し、各行を「IFS」と「read」コマンドを使用して要素に分割します。

その後、要素は2D配列「array」に保存され、読み取りコマンドを使用して各行を要素に分割します。現在、各要素は「array」配列の対応する要素に割り当てられ、最後にネストされたforループを使用して「array」配列の内容が出力されます。

結論

「readarray」コマンドは、Bashスクリプト内で大量のデータを操作するのを容易にします。この記事で提供されている例に従うことで、自分のBashスクリプトで「readarray」を使用してファイルから行を読み込み、それらを2次元配列に処理することができます。