简体   繁体   中英

BASH - Create arrays from lines of csv file, where first entry is array name

I'm learning to script in Bash. I have an CSV file, which contains next lines:

numbers,one,two,three,four,five
colors,red,blue,green,yellow,white
custom-1,a,b,c,d,e
custom+2,t,y,w,x,z

Need to create arrays from this, where first entry is array name, eg.

number=(one,two,three,four,five)
colors=(red,blue,green,yellow,white)
custom-1=(a,b,c,d,e)
custom+2=(t,y,w,x,z)

Here is my script:

IFS=","
while read NAME VALUES ; do
    declare -a $NAME
    arrays+=($NAME)
    IFS=',' read -r -a $NAME <<< "${VALUES[0]}"
done < file.csv

When I try with csv file, containing only two first string (numbers and colors), code works well. And if i try to with number, colors, custom-1, custom-2, there is error during reading csv:

./script.sh: line 5: declare: `custom-1': not a valid identifier
./script.sh: line 7: read: `custom+2': not a valid identifier

because bash does not allow special characters in variable names, as far as I understand. Is there any way to avoid this?

A partial solution. You'll have to split the values for accessing them:

declare -A __ARRAYS__

while IFS=',' read -r name values
do
    __ARRAYS__[$name]=$values
done < file.csv

declare -p __ARRAYS__

output:

declare -A __ARRAYS__='([custom+2]="t,y,w,x,z" [custom-1]="a,b,c,d,e" [numbers]="one,two,three,four,five" [colors]="red,blue,green,yellow,white" )'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM