Bash – How to use ‘readarray’ in bash to read lines from a file into a 2D array

arraysbash

Let's say I have a text file 'demo.txt' who has a table in it like this:

1 2 3    
4 5 6    
7 8 9    

Now, I want to read each line separately using the 'readarray' command in bash, so I write:

readarray myarray < demo.txt   

The problem is that it doesn't work. If I try to print 'myarray' with:

echo $myarray

I get:

1 2 3

Also, if I write:

echo ${myarray[1]}

I get:

4 5 6

Instead of:

2

as I expected. Why is that? How can accesses each line separately and in that line get access to each member?

Best Answer

This is the expected behavior. readarray will create an array where each element of the array is a line in the input.

If you want to see the whole array you need to use

echo "${myarray[@]}"

as echo "$myarray will only output myarray[0], and ${myarray[1]} is the second line of the data.

What you are looking for is a two-dimensional array. See for instance this.

If you want an array with the content of the first line, you can do like this:

$ read -a arr < demo.txt 
$ echo ${arr[0]}
1
$ echo ${arr[1]}
2
$ echo ${arr[2]}
3
Related Question