20

How to extract a file content into array in Bash line by line. Each line is set to an element.

I've tried this:

declare -a array=(`cat "file name"`)

but it didn't work, it extracts the whole lines into [0] index element

codeforester
  • 34,080
  • 14
  • 96
  • 122
Jafar Albadarneh
  • 365
  • 1
  • 4
  • 15

3 Answers3

32

For bash version 4, you can use:

readarray -t array < file.txt
Håkon Hægland
  • 36,323
  • 18
  • 71
  • 152
24

You can use a loop to read each line of your file and put it into the array

# Read the file in parameter and fill the array named "array"
getArray() {
    array=() # Create array
    while IFS= read -r line # Read a line
    do
        array+=("$line") # Append line to the array
    done < "$1"
}

getArray "file.txt"

How to use your array :

# Print the file (print each element of the array)
getArray "file.txt"
for e in "${array[@]}"
do
    echo "$e"
done
Junior Dussouillez
  • 2,102
  • 3
  • 28
  • 36
2

This might work for you (Bash):

OIFS="$IFS"; IFS=$'\n'; array=($(<file)); IFS="$OIFS"

Copy $IFS, set $IFS to newline, slurp file into array and reset $IFS back again.

potong
  • 51,370
  • 6
  • 49
  • 80