bash: come stampare più valori di array


0

Sono nuovo di shell scripting e sto cercando di capire come stampare 3 (o più) valori di un array contemporaneamente. Ecco la lista di parole con cui sto lavorando:

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

Ecco la sceneggiatura che ho iniziato:

$ cat test.sh

#!/bin/bash

arr=($(cat words.txt))

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

Uscita desiderata:

uno due tre

quattro cinque sei

sette otto nove

Se l'utilizzo di un ciclo for non è il metodo migliore e più pratico per ottenere l'output desiderato, sono molto aperto ai suggerimenti.

Risposte:


0

Un modo grezzo per farlo: usa una variabile contatore che viene incrementata per ogni riga nel file. Ogni 3 iterazioni aggiungono una nuova riga ( \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

Ehi, grazie per la tua risposta! Come potrei applicarlo a uno script curl in cui sto scaricando più file contemporaneamente? $ curl -O one -O two -O three
user762744,

0

Può essere fatto con xargs. Con -n3xargs verranno utilizzati 3 argomenti contemporaneamente per il echocomando predefinito .

echo "${arr[@]} | xargs -n3
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.