Форматировать стандартный вывод как текст из нескольких столбцов
Я пытаюсь взять некоторые данные одного столбца и отобразить их в виде столбца, очень похоже на ls
делает. По сути, вы можете думать об этом, как о попытке получить вывод из ls -1
и сделать его похожим на нормальный вывод ls
где число столбцов и пространство для каждого столбца оптимизировано.
Команду столбца нельзя легко заставить занять определенную ширину, а pr
Утилита не динамически меняет количество столбцов.
Имея все доступные команды синтаксического анализа текста, я просто не могу поверить, что нет никакого способа сделать это из коробки.
Это будет довольно сложный небольшой сценарий оболочки, потому что для расчета оптимальной ширины столбца вам нужно знать, сколько элементов будет в вашем столбце (чтобы вычислить длину самого длинного элемента), которого вы не знаете, пока не выясните, сколько будет столбцов, что зависит от ширины каждого столбца. Из-за круговых рассуждений кажется, что итеративное уточнение - единственный путь. Не сложно, но не однострочно. Встроенное было бы намного лучшим решением, если бы оно существовало.
2 ответа
Вы будете хотеть pr
команда:
$ seq 25 | pr -t -5
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
Вы можете быть счастливы с
My Command | column -t
См. Простой способ колонизации STDOUT (форматировать текст в столбцах)?
Если вы хотите упорядочить несколько строк в одну, вы можете использовать команду sed как таковую
ls -1 \
| sed -e 'N;N;N;s/\n/\t/g' \
| column -t
В этом случае вы делаете одну линию из четырех (три N;
четыре минус один) затем смена новой строки \n
на вкладку (\t
) для каждой новой строки (\t
) в буфере (g
).
Последняя строка column -t
сделать это в оптимальных столбцах.
Концовка \
просто экранировать символы новой строки. Вы можете напечатать
ls -1 | sed -e 'N;N;N;s/\n/\t/g' | column -t
вместо.
Надеюсь, вам нравится.