Impressão de espaço / largura fixa das variáveis no shell

0

Eu fiz um relatório tabular de algumas variáveis de dados impressas via printf no shell.

Project One    | 76   | 80M    | 80M    | 80M 
Project Two    | 46M  | 52M    | 52M    | 52M 
Project Three  | 174  | 171M   | -      | 173M 

A saída aqui é um espaço manualmente espaçado. Existe uma maneira de imprimir variáveis que ocupam largura fixa?

Por exemplo, na primeira linha, 76 [espaço], 80M, ... total de três caracteres com impressão com uma variável de shell.

    
por Bimal Poudel 12.07.2015 / 10:18

1 resposta

0

Se eu entendi o que você quer é uma função para deixar certo número de espaços depois de uma string especificada. Aqui está:

fix_space() {
    string="$1"
    len="$2"
    perl -e "my \$str = ''printf "$string" | sed "s/'/\'/g"''; print \$str.' ' x ($len - length(\$str))"
}
echo "''fix_space "ololfdsaf" 20''"
echo "''fix_space "ololff" 20''"

Ele simplesmente torna perl fazendo todo o trabalho sujo. String vai como o primeiro argumento e o comprimento total como o segundo. Tenho certeza de que isso ajudará você a alinhar sua saída.

EDITAR:

Você pode fazer isso sem perl usando apenas o shell. Então você tem que digitar:

printf "'$string'printf ' '%.0s {1..$((len - ${#string}))}''\n"

Referência

link

    
por 13.07.2015 / 03:29