Header Ads

Como usar printf no Bash

Shutterstock / gilangtristiano

A formatação de texto é um tópico interessante, especialmente quando se trata de Bash. Embora existam muitas ferramentas para formatação de texto, printf é único e universal. Aprenda tudo sobre printf no Bash para formatar seu texto da maneira certa!

Usando printf no Bash

C ++ e outros desenvolvedores já estão familiarizados com printf como uma ótima maneira de formatar a saída de texto durante a programação. Ter a mesma ferramenta disponível no Bash é um grande benefício. printf permite que você controle e produza formatos de saída complexos, do jeito que você quiser. A página de manual printf define printf como um & # 8216; formato e dados de impressão &’ ferramenta, que é exatamente o que é e faz.

Por exemplo, você gostaria de imprimir um número baseado em decimal com comprimento exato de 3 bytes (ou caracteres / números) para a parte inteira (a parte antes do ponto decimal ou vírgula, dependendo de onde você mora no mundo e qual é a sua localidade) e 2 bytes (ou caracteres / números) para a parte decimal do número? Não tem problema, printf pode fazer isso e muito mais. Ele também pode enviar o texto para uma coluna específica na tela, etc.

Embora a sintaxe de printf, para um novo desenvolvedor, possa parecer confusa ou complexa, ela é na verdade bastante direta. Há apenas um conjunto limitado de caracteres de formatação comumente empregados que podem ser usados ​​em uma definição de saída printf. Vamos dar uma olhada nisso primeiro.

Sintaxe: printf

Estas são as expressões idiomáticas de formatação de número da sintaxe printf mais comumente usadas:

% d ou% ia inteiro decimal com sinal% u um inteiro decimal sem sinal% fa número de ponto flutuante decimal% e um número de notação científica% g permitirá que printf use% e ou % f, o que for mais curto% ca caractere único% sa string de caracteres %% um literal '%' 

A seguir, é bom saber como especificar opções específicas em relação a esses idiomas de formatação. O formato para especificar opções para eles é o seguinte:

% [bandeira (s)] [largura] [. precisão] [comprimento] number_formatting_idiom 

Exemplos: printf

Então, por exemplo, para ter um flutuante com largura 3 e precisão de 2, você especificaria:

% 3.2f 

Vejamos um exemplo:

 printf "% 3.2f \ n" "100.304" 

Simples e fácil. Observe que poderíamos ter usado uma variável em vez de "100.304":

 VAR1 = 100.304 printf "% 3.2f \ n" $ 

Observe também como adicionamos uma nova linha usando uma \ n sequência de nova linha. Para uma lista completa das sequências interpretadas disponíveis, consulte man printf. Os mais comuns são \ n para nova linha, \ t para tabulação e \\ para barra invertida.

No formato de opções acima, também vimos como podemos especificar sinalizadores. Há uma quantidade limitada de sinalizadores comuns:

 - Texto justificado à esquerda (justificar à direita é o padrão) + Força o uso de um sinal, mesmo se positivo '' Um espaço é inserido se nenhum sinal for usado 0 Botão esquerdo do teclado o número com zeros em vez de espaços quando o preenchimento é especificado 

Assim, por exemplo, podemos ter:

 VAR1 = -100.304 VAR2 = 100.304 printf "% 3.2f \ t \ t% + 3.2f \ n" $ $ 

Aqui usamos duas variáveis ​​e separamos a saída por duas guias usando duas sequências de guias \ t. Também inserimos um espaço (como uma bandeira) entre% e a definição de largura. Isso fez com que o número negativo em VAR1 fosse impresso com um sinal negativo. Se o número fosse positivo, nenhum sinal seria impresso e, em vez disso, um espaço seria impresso na mesma posição.

Finalmente usamos o sinalizador + e, de fato, nosso número é gerado com um sinal + à esquerda, independentemente do fato de que o número já é positivo e, portanto, (normalmente) nenhum sinal seria impresso.

Então, como podemos garantir que temos zeros ou espaços à esquerda, mas ainda temos um comprimento específico? Primeiro, temos que garantir que nossa largura de definição seja maior do que o conteúdo variável e, em segundo lugar, podemos usar o sinalizador 0 para mostrar os zeros à esquerda:

 VAR1 = -100.304 VAR2 = 100.304 printf "% 13.2f \ n% 013.2f \ n% 13.2f" $ $ 

Neste exemplo, imprimimos 3 linhas, separadas duas vezes pela \ n sequência de nova linha. Notamos imediatamente que, se não houver nova linha no final da saída, nosso prompt Bash retornará especificamente no final da nossa terceira linha de saída.

Este pode não ser um formato agradável ou prático no modo interativo no terminal, mas de dentro de um script (pense por exemplo em uma sequência como 1 ... 2 ... 3 ... que é construído passo a passo na tela conforme o progresso no código é feito) isso pode ser muito útil.

Na segunda linha de saída, usamos o sinalizador 0 para indicar que gostaríamos de usar zeros à esquerda para VAR2. A saída de fato produz zeros à esquerda, até o comprimento definido.

Na primeira linha de saída, inserimos um espaço, enquanto na terceira linha de saída (ambas imprimindo a variável VAR1) não o fizemos. A saída é a mesma, que é a única raridade que encontrei enquanto trabalhava com printf; seria de se esperar que houvesse um caractere adicional dada a definição do sinalizador de espaço printf. Isso permanece o mesmo, mesmo se usarmos zeros à esquerda. Também permanece o mesmo se nenhum comprimento for especificado.

A usabilidade do sinalizador de espaço pode, portanto, em alguns casos (números negativos) ser limitada. Este não é o caso para números positivos:

 VAR1 = 100.304 printf "% f \ n% 0f \ n" $ $ 

Neste caso (números positivos), o sinalizador de espaço funciona conforme o esperado e um espaço extra é inserido no caso da primeira saída VAR1.

Conclusão

Usar printf de dentro de scripts Bash ou na linha de comando pode produzir resultados claros e bem definidos. Se você dimensionar as variáveis ​​corretamente (e talvez o intervalo, verifique-as com certeza), o uso de printf fornecerá um método flexível para formatar a saída (e o layout geral da tela para aplicativos maiores) conforme sua escolha.

Neste artigo, examinamos os idiomas de formatação de número comumente usados, como definir a largura da parte inteira e decimal dos números e revisamos os sinalizadores mais comumente usados ​​em printf. Divirta-se imprimindo dados bem formatados com printf!

Nenhum comentário