ファイルを行ごとに読み込んで、各行ごとにスペース区切り配列に入れるスクリプト

ファイルを行ごとに読み込み、各行ごとにスペース区切りの配列に入れたい。

$ cat sample.txt
AAA EEE III
BBB FFF JJJ
CCC GGG KKK
DDD HHH LLL

ファイルをcatしてfor文で回すスクリプトに読ませてみる。

$ cat cat_for.sh
#/bin/zh
[ -f $1 ] || exit 1

for i in $(cat $1)
do
  echo $i
done

catしてforするスクリプトを実行

$ ./cat_for sample.txt
AAA
EEE
III
BBB
FFF
JJJ
CCC
GGG
KKK
DDD
HHH
LLL

スペース区切りで読みやがる。行ごとじゃないんだ。

今度は、よくあるread lineをwhileで回すスクリプトで試す

$ cat readline1.sh
#/bin/zh
[ -f $1 ] || exit 1
while read line
do 
  echo $line
done < $1

よくあるread lineのスクリプトを実行する

$ ./readline1.sh sample.txt
AAA EEE III
BBB FFF JJJ
CCC GGG KKK
DDD HHH LLL

いけてるっぽい。

配列に入れるスクリプトに修正してみる。

$ cat readline2.sh

#/bin/zh
[ -f $1 ] || exit 1
while read line
do 
 # 配列に入れる
  a=($line)
  # 0番目の配列をechoする
  echo ${a[0]}
  # 1番目の配列をechoする
  echo ${a[1]}  
  # 2番目の配列をechoする
  echo ${a[2]}
  # 配列すべてをechoする
  echo ${a[*]}
  echo ${a[@]}
done < $1

配列に入れるスクリプトを実行する

$ ./readline2.sh sample.txt
AAA
EEE
III
AAA EEE III
AAA EEE III
BBB
FFF
JJJ
BBB FFF JJJ
BBB FFF JJJ
CCC
GGG
KKK
CCC GGG KKK
CCC GGG KKK
DDD
HHH
LLL
DDD HHH LLL
DDD HHH LLL

できましたな。

シェルスクリプト - 配列