Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

printf - Formatar e imprimir dados

Ao contrário dos outros comandos neste capítulo, o printf O comando não é usado para tubos (não aceita entrada padrão) nem encontra aplicativos frequentes diretamente na linha de comando (é usado principalmente em scripts). Então, por que isso é importante? Porque é muito usado.

printf (da frase “print formatted”) foi originalmente desenvolvido para a linguagem de programação C e foi implementado em muitas linguagens de programação, incluindo o shell. Na verdade, em bash, printf é embutido.

printf funciona assim:

printf”formato" argumentos

O comando recebe uma string contendo uma descrição do formato que é então aplicada a uma lista de argumentos. O resultado formatado é enviado para a saída padrão. Aqui está um exemplo trivial:



[me @ linuxbox ~] $ printf "Eu formatei a string:% s \ n" foo

Eu formatei a string: foo

[me @ linuxbox ~] $ printf "Eu formatei a string:% s \ n" foo

Eu formatei a string: foo


A string de formato pode conter texto literal (como “Eu formatei a string:”), sequências de escape (como \n, um caractere de nova linha) e sequências começando com o % personagem, que são chamados especificações de conversão. No exemplo acima, a especificação de conversão %s é usado para formatar a string “foo” e colocá-la na saída do comando. Aqui está de novo:



[me @ linuxbox ~] $ printf "Eu formatei '% s' como uma string. \ n" foo

Eu formatei 'foo' como uma string.

[me @ linuxbox ~] $ printf "Eu formatei '% s' como uma string. \ n" foo

Eu formatei 'foo' como uma string.


Como podemos ver, o %s a especificação de conversão é substituída pela string “foo” na saída do comando. A conversão s é usada para formatar dados de string. Existem outros especificadores para outros tipos de dados. Esta tabela lista os tipos de dados comumente usados:


Tabela 21-4: Especificadores de tipo de dados printf comuns


Descrição do especificador

Descrição do especificador

d Formate um número como um inteiro decimal com sinal.


imagem

f Formate e produza um número de ponto flutuante.


imagem

o Formate um inteiro como um número octal.


imagem


imagem

s Formate uma string.


imagem

x Formate um inteiro como um número hexadecimal usando af minúsculo quando necessário.


imagem

X Igual a x mas use letras maiúsculas.


imagem

% Imprime um símbolo% literal (ou seja, especifique “%%”)


imagem


Vamos demonstrar o efeito de cada um dos especificadores de conversão na string "380":



[me @ linuxbox ~] $ printf "% d,% f,% o,% s,% x,% X \ n" 380 380 380 380

380 380

380, 380.000000, 574, 380, 17c, 17C

[me @ linuxbox ~] $ printf "% d,% f,% o,% s,% x,% X \ n" 380 380 380 380

380 380

380, 380.000000, 574, 380, 17c, 17C


Uma vez que especificamos seis especificadores de conversão, devemos também fornecer seis argumentos para

printf para processar. Os seis resultados mostram o efeito de cada especificador.

Vários componentes opcionais podem ser adicionados ao especificador de conversão para ajustar sua saída. Uma especificação de conversão completa pode consistir no seguinte:

%[bandeiras][largura][.precisão] conversão_especificação

Vários componentes opcionais, quando usados, devem aparecer na ordem especificada acima para serem interpretados corretamente. Aqui está uma descrição de cada:


Tabela 21-5: Componentes de especificação de conversão de printf


Descrição do componente

Descrição do componente

sinalizadores Existem cinco sinalizadores diferentes:


imagem

# - Use o “formato alternativo” para a saída. Isso varia de acordo com o tipo de dados. Para conversão o (número octal), a saída é prefixada com

0. Para conversões x e X (número hexadecimal), a saída é prefixada com 0x ou 0X respectivamente.


imagem

0– (zero) Preencha a saída com zeros. Isso significa que o campo será preenchido com zeros à esquerda, como em “000380”.


imagem

- - (traço) Alinhe a saída à esquerda. Por padrão, printf alinha a saída à direita.


imagem

'' - (espaço) Produz um espaço inicial para números positivos.


imagem

+ - (sinal de mais) Significa números positivos. Por padrão, apenas printf


imagem


imagem

assina números negativos.


imagem

largura Um número que especifica a largura mínima do campo.


imagem

.precisão Para números de ponto flutuante, especifique o número de dígitos de precisão a serem produzidos após o ponto decimal. Para conversão de string, precisão especifica o número de caracteres a serem produzidos.


imagem


Aqui estão alguns exemplos de diferentes formatos em ação:


Tabela 21-6: Exemplos de especificações de conversão de impressão


Argumento

Formato

Resultado

Notas

380

"% d"

380

Formatação simples de um

inteiro.

380

"% # x"

0x17c

Inteiro formatado como um

número hexadecimal usando

o sinalizador de “formato alternativo”.

380

"% 05d"

00380

Inteiro formatado com

zeros à esquerda (preenchimento)

e uma largura de campo mínima

de cinco caracteres.

380

"% 05.5f"

380.00000

Número formatado como um

número de ponto flutuante com

preenchimento e cinco decimais

lugares de precisão. Desde a

o mínimo especificado

largura do campo (5) é menor que

a largura real do

número formatado, o

preenchimento não tem efeito.

380

"% 010.5f"

0380.00000

Aumentando o

largura mínima do campo para 10

o preenchimento agora está visível.

380

"% + d"

+380

A bandeira + sinaliza um sinal positivo

número.

380

"% -d"

380

O sinalizador - à esquerda alinha o

formatação.


abcdefghijk

"% 5s"

Abcedfghijk

Uma string formatada com uma largura de campo mínima.

abcdefghijk

"% .5s"

abcde

Ao aplicar precisão a uma string, ela é truncada.


Mais uma vez, printf é usado principalmente em scripts onde é empregado para formatar dados tabulares, em vez de na linha de comando diretamente. Mas ainda podemos mostrar como ele pode ser usado para resolver vários problemas de formatação. Primeiro, vamos mostrar alguns campos separados por caracteres de tabulação:



[me @ linuxbox ~] $ printf "% s \ t% s \ t% s \ n" str1 str2 str3

str1 str2 str3

[me @ linuxbox ~] $ printf "% s \ t% s \ t% s \ n" str1 str2 str3

str1 str2 str3


Inserindo \t (a sequência de escape para uma guia), alcançamos o efeito desejado. A seguir, alguns números com formatação elegante:



[me @ linuxbox ~] $ printf "Linha:% 05d% 15.3f Resultado:% + 15d \ n" 1071 3.14156295 32589

Linha: 01071 3.142 Resultado: +32589

[me @ linuxbox ~] $ printf "Linha:% 05d% 15.3f Resultado:% + 15d \ n" 1071 3.14156295 32589

Linha: 01071 3.142 Resultado: +32589


Isso mostra o efeito da largura mínima do campo no espaçamento dos campos. Ou que tal formatar uma pequena página da web:



[me @ linuxbox ~] $ printf " \ n \ t \ n \ t \ t % s \ n

\ t \ n \ t \ n \ t \ t % s \ n \ t \ n \ n "" Título da página "" Conteúdo da página "

Título da página

Conteúdo da página

[me @ linuxbox ~] $ printf " \ n \ t \ n \ t \ t % s \ n

\ t \ n \ t \ n \ t \ t % s \ n \ t \ n \ n "" Título da página "" Conteúdo da página "

Título da página

Conteúdo da página


Top OS Cloud Computing na OnWorks: