Как произвести содержание массива в столбцах в Bash

Я хотел отобразить длинный список строк от массива.

Прямо сейчас, мой сценарий, пробежавший для цикла, повторяющего каждое значение к стандартному выводу:

for value in ${values[@]}
do
  echo $value
done

Да, это довольно ужасно! И список одного столбца довольно длинен также...

Я задавался вопросом, могу ли я найти команду или встроенную помощь мне отобразить все те значения в столбцах, как ls команда делает по умолчанию при списке каталога (ls -C).

[Обновление]

Потеря моего мозга с column не отображая правильно отформатированные столбцы, вот больше информации:

Значения: $ values=( 01----7 02----7 03-----8 04----7 05-----8 06-----8 07-----8 08-----8 09---6 10----7 11----7 12----7 13----7 14-----8 15-----8 16----7 17----7 18---6 19-----8 20-----8 21-----8) (Заметьте первые две цифры как индекс и последний, указывающий на длину строки для удобочитаемости),

Команда: echo " ${values[@]/%/$'\n'}" | column

Результат: неверные столбцы http://tychostudios.ch/multipurpose/bad_columns.png

Что-то идет не так, как надо...

10
задан Paused until further notice. 11 June 2010 в 14:01
поделиться

4 ответа

Вы можете направить ваш вывод в column.

column, похоже, борется с тем, что некоторые данные в одноколоночном вводе могут быть меньше, чем стоп табуляции (8 символов).

Использование printf внутри for-петли для заполнения значений до 8 символов, похоже, помогает:

for value in "${values[@]}"; do 
    printf "%-8s\n" "${value}"
done | column
18
ответ дан 3 December 2019 в 16:09
поделиться

Вот пара техник, которые можно использовать с ответом Johnsyweb'а, чтобы вы могли делать вывод без цикла:

saveIFS=$IFS
IFS=$'\n'
echo "${values[*]}" | column
IFS=$saveIFS

или

echo " ${arr[@]/%/$'\n'}" | column

или

echo " ${arr[@]/%/$'\n'}" | sed 's/^ //' | column
4
ответ дан 3 December 2019 в 16:09
поделиться

Это может показаться излишним, но я придумал собственное решение. Я написал небольшой скрипт, который делает именно то, что я хотел: берет список значений и выводит их в виде красиво отформатированной колонки.

http://github.com/Arko/Columnize

1
ответ дан 3 December 2019 в 16:09
поделиться

Tabspaces


Используйте табуляцию после каждого значения.

(Он также автоматически переходит к следующей строке ...)

for value in ${values[@]}
do
  echo -en "$value\t"
done

Подробная информация здесь

GoodLUCK !!
- CVS

0
ответ дан 3 December 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: