bash: como imprimir vários valores de arrays

0

Sou novo no shell de scripts e tentando descobrir como imprimir 3 (ou mais) valores de um array de uma só vez. Aqui está a lista de palavras com a qual estou trabalhando:

$ cat words.txt 
one
two
three
four
five
six
seven
eight
nine
ten

Aqui está o script que eu comecei:

$ cat test.sh

#!/bin/bash

arr=($(cat words.txt))

for i in "${arr[@]}"; do
echo "$i" "$i" "$i"
done

Saída desejada:

one two three

four five six

seven eight nine

Se usar um loop for não for o melhor e mais prático método para obter o resultado desejado, estou muito aberto a sugestões.

    
por user762744 18.08.2017 / 18:27

2 respostas

0

Uma maneira crua de fazer isso: Use uma variável de contador que é incrementada para cada linha no arquivo. Cada 3 iterações adicionam uma nova linha ( \n ).

!/bin/bash

counter=1

cat "words.txt" | while read i
do
        echo -n "$i "
        if [ 'expr $counter % 3' -eq 0 ]
        then
                echo -en "\n"
        fi
        let counter=counter+1
done
    
por 18.08.2017 / 19:15
0

Pode ser feito com xargs. Com -n3 xargs usará 3 argumentos ao mesmo tempo para o comando echo padrão.

echo "${arr[@]} | xargs -n3
    
por 19.08.2017 / 01:22