如何逐行读取文件并使用shell脚本在数组中存储值

时间:2015-12-09 11:19:34

标签: shell

如何逐行读取文件并将每个行值存储在不同的数组变量中。例如,file.txt包含以下行:

abc;2;1;3;4;5;6;7 
cba;1;2;3;4;5;6;7;8;9;
......
.......

所以我需要逐行阅读并将每个由分隔符分隔的行值存储在不同的变量中。喜欢第1行

arr[0]=abc, arr[1]=2, arr[2]=1 and so on

并且在读完第一行后,它将读取第2行并将其值存储为:

arr[0]=cba, arr[1]=1, arr[2]=2 and so on

我试过下面的代码

while read line
do
    arr+=("$line")
done <$file

for ((i=0; i < ${#arr[*]}; i++))
do
    echo "${arr[i]}"

done

但在这种情况下,我在arr[i]逐行完整。我需要将这个行的值存储在seprate变量中,如上所述。

1 个答案:

答案 0 :(得分:1)

假设你正在使用bash:

while read line; do
    varname=${line%%;*}
    IFS=';' read -a $varname <<< $line
done < file
  • 逐行阅读文件
  • 使用 bash 的子字符串数学
  • 确定变量的名称
  • 使用read -a
  • 读入数组
$ echo ${abc[0]} ${abc[1]}
abc 2
$ echo ${cba[0]} ${cba[1]}
cba 1