web-dev-qa-db-ja.com

改行で区切られた文字列のファイルを配列に変換する方法

次のようなデータを含むファイルがあります。

UserName
UserName
UserName

各データは改行で区切られます。

そのデータを文字列の配列に変換して変数に格納する必要があります。

BashまたはShellの実行だけでこれを達成するにはどうすればよいですか?

2
David

mapfileの場合:

$ mapfile -t array < yourfile

$ declare -p array # print array content
  declare -a array=([0]="UserName" [1]="UserName" [2]="UserName")
5
_$ set -f             # disable globbing
$ arr=($(<file.csv))
$ set +f             # enable globbing
$ declare -p arr     # print array content
declare -a arr=([0]="UserName" [1]="UserName" [2]="UserName")
_
  • arr=(…)配列を作成
  • $(<file.csv)ファイルの読み取り_file.csv_($(cat file.csv)など)

ファイルを読み取る前に、グロブを無効にして、_*_や_?_などの文字や特殊なパターン(パス名の拡張)でユーザー名が展開されないようにする必要があります。

要素は、改行、スペース、またはタブ文字で分割され(_$IFS_が変更されていない場合)、トリミングされます。

3
Freddy
i=0
while IFS= read -r line
do
  var[i++]="$line"
done < filename

ここで、var配列変数はすべての名前を格納します。そして、によってアクセスすることができます

printf '%s\n' "${var[0]}"
printf '%s\n' "${var[1]}"
...
...

2
Navi