UPDATE: adicionado um script (não um forro, no entanto), que permite que você escolha quais colunas você deseja justificado ... Ele serve para esquerda (padrão) e direita (não Center) .. Como é, ele espera Campos delimitados por TAB. Você pode alterar o separador de saída da coluna via $ 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/$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/g; s/$Q/$S/g; s/Z$//"
Saída típica:
| The Lost Art | +1255 | 789 | Los | -55 |
| of the Idle Moment | -159900 | 0123 | Fabulosos Cadillacs | +321987 |
Nota: column
não funciona como você poderia esperar quando você tem células vazias.
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.
A partir daqui, é a resposta original que está relacionada, mas não aborda especificamente a questão principal da questão.
Aqui está o "one-liner" que se ajusta a números inteiros (e permite sinais +/-). O "X" posiciona o column
no bloco direito da última célula.
sed 's/$/\tX/g' file |column -t |sed -r 's/([-+]?[0-9.]+)( +)//g; s/^ //; s/X$//'
Saída típica
+1255 789 011 -55 34
-159900 33 022 +321987 2323566
Se você tiver valores float, ou floats misturados com inteiros, ou apenas inteiros, (sinais opcionais de +/-), um pouco mais de shuffling funciona.
sed -r 's/$/\tX/;
s/([-+]?[0-9]+\.[0-9]+)\t/@\t/g
s/([-+]?[0-9]+)\t/.@\t/g
s/\./\t./g' file |
column -t |
sed -r 's/ \././g
s/([-+]?[0-9.]+)( +)//g
s/\.@/ /g
s/@//g
s/ +X$//'
Saída típica
+1255 789 0.11 -55 34
-15.9900 33 0.22 +321.987 2323566