8

I couldn't find a good and simple answer to this question neither on google nor here on stackoverflow.

Basically I have two arrays that I need to print into the terminal side by side since one array is a list of terms and the other the terms's definitions. Does anyone know a good way of doing this?

Thanks in advance.

Aslet
  • 127
  • 2
  • 7

2 Answers2

12

Here's a "one-liner":

paste <(printf "%s\n" "${terms[@]}") <(printf "%s\n" "${defs[@]}")

This will create lines consisting of a term and a def separated by a tab, which might not, strictly speaking, be "side by side" (since they're not really in columns). If you knew how wide the first column should be, you could use something like:

paste -d' ' <(printf "%-12.12s\n" "${terms[@]}") <(printf "%s\n" "${defs[@]}")

which will pad or truncate the terms to 12 characters exactly, and then put a space between the two columns instead of a tab (-d' ').

rici
  • 234,347
  • 28
  • 237
  • 341
9

You can use a C-style for loop to accomplish this, assuming both arrays are the same length:

for ((i=0; i<=${#arr1[@]}; i++)); do
    printf '%s %s\n' "${arr1[i]}" "${arr2[i]}"
done
jordanm
  • 33,009
  • 7
  • 61
  • 76