bash: как напечатать значения нескольких массивов
Я новичок в сценариях оболочки и пытаюсь выяснить, как напечатать 3 (или более) значения массива одновременно. Вот список слов, с которыми я работаю:
$ cat words.txt
one
two
three
four
five
six
seven
eight
nine
ten
Вот сценарий, который я начал:
$ cat test.sh
#!/bin/bash
arr=($(cat words.txt))
for i in "${arr[@]}"; do
echo "$i" "$i" "$i"
done
Желаемый результат:
один два три
четыре пять шесть
семь восемь девять
Если использование цикла for не лучший и самый практичный метод для получения желаемого результата, я очень открыт для предложений.
2 ответа
Грубый способ сделать это: использовать переменную счетчика, которая увеличивается для каждой строки в файле. Каждые 3 итерации добавляйте новую строку (\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
Можно сделать с помощью xargs. С -n3
xargs будет использовать 3 аргумента одновременно по умолчанию echo
команда.
echo "${arr[@]} | xargs -n3