Bóson Treinamentos em Ciência e Tecnologia

Formatar e exibir texto com o comando printf no terminal e em scripts

Formatar saída com printf em shell scripting

Formatar e exibir texto com o comando printf em Shell Scripting e no Terminal do Linux

O comando printf  no Linux é uma ferramenta interna (built-in) do shell Bash e de outros como Ksh e Zsh que permite formatar e exibir uma saída de texto.

Este comando é útil para exibir informações em um formato específico no terminal, como por exemplo tabelas e relatórios.

Sintaxe

A sintaxe básica do comando “printf” é a seguinte:

$ printf FORMATO [ARGUMENTOS]

onde FORMATO é a string de formato que especifica como a saída será exibida, podendo conter caracteres normais a serem impressos na saída, caracteres de escape, flags e especificações de conversão, para descrição do formato da saída.

Os ARGUMENTOS (opcionais) são passados para os especificadores de formato e correspondem aos valores que serão exibidos de acordo com o formato especificado.

Exemplo:

$ printf "Dia da semana: %s\nHorário: %s\n" Sábado 11:00

Saída:

Dia da semana: Sábado
Horário: 11:00

Neste exemplo, o formato é a string Dia da semana: %s\nHorário: %s\n ao passo que “Sábado” e “11:00” são os argumentos. A string de formato possui caracteres de quebra de linha \n e dois especificadores de formato %s, que são substituídos pelos argumentos.

Caracteres de Escape

Os caracteres de escape mais comuns usados com printf são:

Especificações de formato

Uma especificação de formato tem a seguinte sintaxe:

%[flags][largura][.precisão]especificador

O especificador é um caractere que especifica como deve ser feita a interpretação do argumento correspondente. Este é um caractere obrigatório, sempre posicionado após os outros campos (diretivas, que são opcionais).

A seguir temos uma lista com alguns tipos de especificadores de conversão:

Por exemplo, podemos imprimir um valor numérico em sistemas de numeração diferentes da seguinte forma:

$ printf "Decimal: %d\nHex: %x\nOctal: %o\n" 32 32 32

Saída:

Decimal: 32
Hex: 20
Octal: 40

No exemplo o número inteiro 32 é impresso nos sistemas decimal, hexadecimal e octal, respectivamente, pelo uso dos especificadores %d, %x e %o.

Diretiva de flags

A diretiva de flags (opcional) é empregada para realizar o ajuste de alinhamento, prefixos, preenchimento de zeros, etc.

Algumas das flags mais comuns incluem:

Diretiva largura

A diretiva de largura é posicionada após qualquer caractere de flag, e especifica o número mínimo de caracteres que devem resultar na conversão.

Se a string de saída for menor que a largura especificada, será automaticamente preenchida com espaços em branco à esquerda. Vejamos um exemplo:

$ printf "%15s %d\n" Fábio 45

Saída:

            Fábio 45

Neste exemplo %15s significa que a largura deve ser de 15 caracteres. Como os valores “Fábio” e 305 possuem menos de 15 caracteres quando combinados, espaços à esquerda serão adicionados até completar essa largura ao exibir o resultado.

A saída é alinhada à direita por padrão; podemos alinhá-la á esquerda com o flag – (%-15s).

Diretiva de precisão

Esse modificador consiste em um ponto (.) seguido por um número inteiro positivo ou um asterisco, usados para ajustar a quantidade de caracteres numéricos, de string, ou a quantidade de casas decimais a serem mostradas.

A precisão funciona da seguinte forma:

Vejamos um exemplo:

$ printf "O valor de pi é %.4f \n" 3,14159265359

Saída:

O valor de pi é 3,1416

Note que o valor foi arredondado para 3,1416.

Se usarmos um asterisco, o valor da precisão será fornecido por um argumento de precisão que precede o argumento a ser formatado. Modificando o exemplo anterior teríamos:

$ printf "O valor de pi é %.*f" 4 3,14159265359

Saída:

O valor de pi é 3.1416

Exemplos de uso do comando printf em scripts

Vejamos agora exemplos de como usar o comando printf em scripts do shell Bash, para formatar a saída de dados exibida no terminal.

Exemplo 01

#!/bin/bash
printf "%s" "Qual seu nome completo?"
IFS= read -r nome_completo
printf "%s" "Qual sua idade?"
read idade
printf "Nome: %s\nIdade: %d\n" $nome_completo $idade

Neste exemplo, o comando “printf” é usado para formatar a saída do script com o nome e a idade fornecidos por uma pessoa. A string de formato especifica que o primeiro argumento deve ser exibido como uma string (“%s”) e o segundo como um número inteiro (“%d”).

No exemplo acima, o IFS= redefine a variável IFS para que nenhum caractere seja interpretado como separador de campo. Em seguida, o comando read é usado para ler a entrada do usuário e armazená-la na variável “nome_completo”.

Exemplo 02

Vejamos outro exemplo de uso do comando “printf”:

#!/bin/bash
printf "%-15s %5s\n" "Nome" "Idade"
printf "%-15s %5d\n" "João" 30
printf "%-15s %5d\n" "Maria" 25

Neste exemplo, o comando “printf” é usado para exibir uma tabela com o nome e a idade de duas pessoas. A string de formato especifica que o primeiro argumento deve ser exibido como uma string com largura de 15 caracteres e alinhado à esquerda (“%15s“) e o segundo como um número inteiro com largura de 5 caracteres e alinhado à direita (“%5d“).

Conclusão

O comando printf pode ser combinado com outras ferramentas do Bash Shell (e outros shells) para criar scripts mais avançados, como loops e condicionais. O importante é entender como o comando funciona e como ele pode ser usado para formatar e exibir uma saída de texto.

Lista com todos os artigos da Bóson Treinamentos

Sair da versão mobile