1. ホーム
  2. arrays

タブ区切りのファイル行を配列に読み込む

2023-09-02 23:23:46

質問

スクリプトにファイルを一行ずつ読み込ませたい。ファイルの各行はタブで区切られた複数の値なので、各行を配列に読み替えたいと思います。

典型的なbashの"read file by line"の例です。

while read line
do
echo $line;
done < "myfile"

私の場合、myfileはこのようになります(タブ区切りの値)。

value1 value2 value3
value4 value5 value6

ループの各反復において、各行を配列に格納することで、以下のことが可能になります。

while read line into myArray
do
 echo myArray[0]
 echo myArray[1]
 echo myArray[2]
done < "myfile"

これは、最初のループの繰り返しで次のように表示されます。

value1
value2
value3

そして、2回目の繰り返しで、次のように表示されます。

value4
value5
value6

これは可能ですか?私が見ることができる唯一の方法は、手動で値を分割する小さな関数を書くことですが、これのためのbashの組み込みサポートはありますか?

どのように解決するのですか?

あと少しです。

while IFS=$'\t' read -r -a myArray
do
 echo "${myArray[0]}"
 echo "${myArray[1]}"
 echo "${myArray[2]}"
done < myfile

(この -rread その \ は入力データの中で特別なものではありません。 -a myArray は、入力行を単語に分割し、その結果を myArray に格納します。 IFS=$'\t' は、通常のBashのデフォルトである空白も単語の分割に使用するのではなく、タブのみを使用して単語を分割するように指示します。このアプローチでは、1つの またはそれ以上の を区切り文字として扱うので、もしフィールドが空白の場合、後のフィールドは配列の前の位置に "シフト"されることに注意してください。それは O.K.でしょうか?)