Я редактирую простую таблицу. Я хотел бы, чтобы это было красиво отформатировано. Хотя я мог бы использовать tbl
, latex
или подобное, это кажется излишним - простого текста действительно достаточно. Поскольку это просто, я мог бы также иметь источник, чтобы быть выходом. Так что источник тоже должен хорошо выглядеть. Кажется, что это должно быть идеальной работой column -s '|' -t
- он находит разделители и автоматически вставляет пробелы для выравнивания в соответствии с максимальной шириной в каждом столбце. К сожалению, он удаляет разделители, поэтому я не могу перезапустить его после дальнейшего редактирования. Есть ли какой-нибудь хороший инструмент для обработки текста, который может сделать это идемпотентно, чтобы его вывод служил вводом? Или мне нужно написать свое?
РЕДАКТИРОВАТЬ: вот пример того, что я хочу:
foo | bar | baz
abc def | 12 | 23456
должен стать
foo | bar | baz
abc def | 12 | 3456
Когда ' '
есть разделитель и разделитель, column -t
работает хорошо. Но в моих предметах есть пробелы, поэтому я не могу ими воспользоваться. Наличие разделителей, отличных от разделителей, усложняет ситуацию. Я думаю, что полезно использовать их как символы-разделители, когда они находятся рядом с разделителями, но это не то, что column -s '|' -t
нужно (хотя, очевидно, текущее поведение также полезно).
источник
printf
Холокоста каждый раз, которое я нашел до сих пор, - это добавление в данные уникального символа (например@
) и... | column -s@ -t
последующее использование .Ответы:
Не уверен, правильно ли я понимаю, в чем твоя проблема. Но можно ли решить, добавив дополнительный временный разделитель? следовательно, вы можете использовать второй разделитель, чтобы отметить разделение, оставив исходный разделитель без изменений.
Посмотрите этот пример, где я добавляю «@» к каждому из «|» поэтому ввод команды столбца будет «ххх @ | гггг». Столбец будет обрабатывать "@", сохраняя "|" нетронутым:
источник
sed 's/ *| */@| /g'
вместо этогоsed 's/ |/|/g'
послеcolumn
исправлений дополнительные пробелы добавлены. Теперь у нас есть решение, которое работает достаточно хорошо для меня. (Хотя было бы неплохо, если бы он не зависел от такого дополнительного персонажа, как этот. Что если он недоступен?)Это было недоступно, когда вы задали вопрос, но по состоянию на v. 2.23
column
изutil-linux
позволяет выбрать разделитель вывода с помощьюТак что просто запустите:
источник
util-linux
версия недоступна в Ubuntu 18.04 (и, возможно, в других дистрибутивах, производных от Debain) на момент написания этой статьи.bsdmainutils
Доступна только версия.bsdmainutils
Версия не поддерживает выход форматирования.Вот скрипт bash. Он не использует 'column -t`, и разделитель обрабатывается точно так же, как и IFS, потому что это IFS (или, по крайней мере, внутренняя версия IFS в awk) ... Разделителем по умолчанию является $' \ t '
Этот скрипт полностью дополняет самое правое поле.
'column' не делает этого.
Разбив все столбцы, этот скрипт можно
легко изменить, чтобы создать рамку таблицы.
Заметка. Входной файл должен быть обработан дважды
(для этого также нужно будет сделать «column»)
. Первый шаг - получить максимальную ширину столбца.
Второй проход - расширение полей (на столбец).
Добавлены некоторые опции и исправлена явная ошибка (переименование переменных :(
источник
Взгляните на плагин vim под названием Tabularize
источник
Это два прохода твик на hmontoliu ответа «s , что позволяет избежать нуждающегося в жесткий код разделителя, угадывая его из входных данных.
$d
.@
, как в комментарии PeterO .Код является функцией, которая принимает имя файла или ввод из STDIN :
Выход
algn foo
(или такжеalgn < foo
):источник
Использовал идею hmontoliu для реализации простой команды:
Комментарий:
${1:-,}
- это первый аргумент,
по умолчаниюsed
вставляет промежуточный символ ($interm
2-й аргумент или~
по умолчанию)column
заменяет промежуточный символ пробелами, которые выполняют выравниваниеsed
убирает лишние пробелы послеcolumn
командыПример использования:
Он также хорош тем, что он идемпотентен: вы можете применить его несколько раз и получить один и тот же результат (например, когда вы редактируете в vim и realign).
источник