Questão bash: como imprimir vários valores de matrizes


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 as quais 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:

um dois três

quatro cinco seis

sete oito nove

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


0


origem




Respostas:


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

0



Ei, obrigado pela sua resposta! Como eu poderia aplicar isso a um script curl, no qual estou baixando vários arquivos de uma só vez? $ curl -O one -O two -O three - user762744


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

echo "${arr[@]} | xargs -n3

0