3

Я пытаюсь взять некоторые данные из одного столбца и отобразить их в виде столбца в формате tty, как это делает ls . По сути, вы можете думать об этом как о попытке взять вывод из ls -1 и сделать его похожим на обычный вывод ls , где оптимизировано число столбцов и пространство, выделенное для каждого столбца.

Команду column нельзя легко заставить занять определенную ширину, а утилита pr не изменяет динамически количество столбцов.

Имея все доступные команды синтаксического анализа текста , я просто не могу поверить, что нет никакого способа сделать это из коробки.

Это будет довольно сложный небольшой сценарий оболочки, потому что для расчета оптимальной ширины столбца вам нужно знать, сколько элементов будет в вашем столбце (чтобы вычислить длину самого длинного элемента), которого вы не знаете, пока не выясните, сколько будет столбцов, что зависит от ширины каждого столбца. Из-за круговых рассуждений кажется, что итеративное уточнение - единственный путь. Не сложно, но не однострочно. Встроенное было бы намного лучшим решением, если бы оно существовало.

2 ответа2

1

Вам понадобится команда 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
0

Вы можете быть счастливы с

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 

вместо.

Надеюсь, вам нравится.

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