ОБНОВЛЕНИЕ: добавленный сценарий (не один лайнер, хотя), который позволяет Вам выбирать, какие столбцы Вы хотите выровненный по ширине... Это обслуживает Левое (значение по умолчанию) и Право (не Центр).. Как есть это ожидает, что ВКЛАДКА разграничила поля. Можно изменить выходной разделитель столбца через $S.
RJustCol=(2 3 5) # Set columns to be right justified.
RJustRex=; Q=$'\x01'; R=$'\x02'; S=" | "
for r in ${RJustCol[@]} ;do # Build the Right-justify regex.
RJustRex="${RJustRex}s/^(([^\t]+\t){$((r-1))})([^\t]+)\t/\1\3$R\t/; "
done
sed -r "s/$/\tZ/g; s/^/$Q/; s/\t/\t$Q/g; $RJustRex" file |
column -t -s $'\t' |
sed -r "s/ $Q/$Q/g; s/$Q([^$Q$R]*)$R([^$Q]*)/$S\2\1/g; s/$Q/$S/g; s/Z$//"
Типичный вывод:
| The Lost Art | +1255 | 789 | Los | -55 |
| of the Idle Moment | -159900 | 0123 | Fabulosos Cadillacs | +321987 |
Примечание:column
не работает, поскольку Вы могли бы ожидать, когда у Вас есть пустые ячейки.
Option -n
By default, the column command will merge multiple adjacent
delimiters into a single delimiter when using the --t option;
this option disables that behavior. This option is a Debian
GNU/Linux extension.
Отсюда на исходный ответ, который связан с, но конкретно не решает tne основную проблему th вопроса..
Вот "острота", которая удовлетворяет целым числам (и позволяет +/-знаки).. "X" силы заполнителя column
к правильной клавиатуре последняя ячейка.
sed 's/$/\tX/g' file |column -t |sed -r 's/([-+]?[0-9.]+)( +)/\2\1/g; s/^ //; s/X$//'
Типичный вывод
+1255 789 011 -55 34
-159900 33 022 +321987 2323566
Если у Вас есть значения плавающие или плавания, смешанные с целыми числами или просто целыми числами, (дополнительное продвижение +/-знаки), немного больше работ перестановки.
sed -r 's/$/\tX/;
s/([-+]?[0-9]+\.[0-9]+)\t/\1@\t/g
s/([-+]?[0-9]+)\t/\1.@\t/g
s/\./\t./g' file |
column -t |
sed -r 's/ \././g
s/([-+]?[0-9.]+)( +)/\2\1/g
s/\.@/ /g
s/@//g
s/ +X$//'
Типичный вывод
+1255 789 0.11 -55 34
-15.9900 33 0.22 +321.987 2323566
В bash
, typeset
и declare
точно то же. Единственная разница - это typeset
считается устаревшим.
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
Set variable values and attributes.
Obsolete. See `help declare'.
Страница справочника даже перечисляет их на одном дыхании:
declare [-aAfFgilrtux] [-p] [name[=value] ...]
typeset [-aAfFgilrtux] [-p] [name[=value] ...]
Declare variables and/or give them attributes.
typeset
является портативным к некоторым другим оболочкам, например, ksh93
. При стремлении к мобильности перекрестной оболочки использовать typeset
(и удостоверьтесь, что способ, которым Вы называете его, является портативным). Если Вы не заботитесь о такой мобильности, использовать declare
.
Я знаю случай где declare
полезно для предотвращения зла eval
: переменная косвенность:
$ var=foo
$ x=var
$ declare "$x=another_value"
$ echo $var
another_value
typeset
и declare
?
– jw013
25.02.2013, 18:40
help typeset
, не вman typeset
. – fedorqui 22.07.2014, 11:05typeset
считается устаревшим? – Alexej Magura 05.10.2016, 05:40