Я новичок в сценариях оболочки и пытаюсь выяснить, как напечатать 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 ответа2

0

Можно сделать с помощью xargs. С -n3 xargs будет использовать 3 аргумента одновременно для команды echo по умолчанию.

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

Грубый способ сделать это: использовать переменную счетчика, которая увеличивается для каждой строки в файле. Каждые 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .