2013-05-12 15 views
6

Non sono riuscito a trovare una risposta buona e semplice a questa domanda né su google né su stackoverflow.Come stampare due array affiancati con lo script di bash?

Fondamentalmente ho due array che ho bisogno di stampare nel terminale fianco a fianco poiché un array è un elenco di termini e l'altro le definizioni dei termini. Qualcuno conosce un buon modo per farlo?

Grazie in anticipo.

+0

Utilizzare un array associativo? – jordanm

risposta

6

È possibile utilizzare un C-style ciclo for per raggiungere questo obiettivo, assumendo entrambe le matrici sono la stessa lunghezza:

for ((i=0; i<=${#arr1[@]}; i++)); do 
    printf '%s %s\n' "${arr1[i]}" "${arr2[i]}" 
done 
8

Ecco un "one-liner":

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

Questo creerà linee che consistono in un termine e una def separati da una tabulazione, che potrebbero non essere, strettamente parlando, "affiancati" (poiché non sono realmente nelle colonne). Se tu sapessi quanto sia ampia la prima colonna dovrebbe essere, si potrebbe usare qualcosa come:

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

che pad o troncare i termini a 12 caratteri esattamente, e poi mettere uno spazio tra le due colonne invece di una scheda (-d' ').

Problemi correlati