AWK - Pretty Printing

Até agora nós usamos AWK's print e printffunções para exibir dados na saída padrão. Mas printf é muito mais poderoso do que o que vimos antes. Esta função é emprestada da linguagem C e é muito útil durante a produção de saída formatada. Abaixo está a sintaxe da instrução printf -

Sintaxe

printf fmt, expr-list

Na sintaxe acima fmt é uma string de especificações e constantes de formato. expr-list é uma lista de argumentos correspondentes aos especificadores de formato.

Sequências de Escape

Semelhante a qualquer string, o formato pode conter sequências de escape incorporadas. Discutidas abaixo estão as sequências de escape suportadas pelo AWK -

Nova linha

O exemplo a seguir imprime Hello e World em linhas separadas usando o caractere de nova linha -

Example

[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'

Ao executar este código, você obtém o seguinte resultado -

Output

Hello
World

Guia horizontal

O exemplo a seguir usa a guia horizontal para exibir campos diferentes -

Example

[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'

Ao executar o código acima, você obtém o seguinte resultado -

Output

Sr No   Name    Sub Marks

Guia Vertical

O exemplo a seguir usa a guia vertical após cada arquivado -

Example

[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'

Ao executar este código, você obtém o seguinte resultado -

Output

Sr No
   Name
      Sub
         Marks

Backspace

O exemplo a seguir imprime um backspace após cada campo, exceto o último. Ele apaga o último número dos três primeiros campos. Por exemplo,Field 1 é exibido como Field, porque o último caractere é apagado com backspace. No entanto, o último campoField 4 é exibido como está, pois não tínhamos um \b depois de Field 4.

Example

[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'

Ao executar este código, você obtém o seguinte resultado -

Output

Field Field Field Field 4

Retorno de carruagem

No exemplo a seguir, depois de imprimir todos os campos, fazemos um Carriage Return e imprime o próximo valor em cima do valor impresso atual. Isso significa que, na saída final, você pode ver apenasField 4, já que foi a última coisa a ser impressa em cima de todos os campos anteriores.

Example

[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'

Ao executar este código, você obtém o seguinte resultado -

Output

Field 4

Feed de formulário

O exemplo a seguir usa alimentação de formulário após imprimir cada campo.

Example

[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'

Ao executar este código, você obtém o seguinte resultado -

Output

Sr No
   Name
      Sub
         Marks

Especificador de formato

Como na linguagem C, AWK também possui especificadores de formato. A versão AWK da instrução printf aceita os seguintes formatos de especificação de conversão -

% c

Ele imprime um único caractere. Se o argumento usado para%cé numérico, é tratado como um caractere e impresso. Caso contrário, o argumento é considerado uma string e o único primeiro caractere dessa string é impresso.

Example

[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'

Output

Ao executar este código, você obtém o seguinte resultado -

ASCII value 65 = character A

% d e% i

Ele imprime apenas a parte inteira de um número decimal.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'

Ao executar este código, você obtém o seguinte resultado -

Output

Percentags = 80

% e e% E

Ele imprime um número de ponto flutuante no formato [-] d.dddddde [+ -] dd.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'

Ao executar este código, você obtém o seguinte resultado -

Output

Percentags = 8.066000e+01

o %E formato usa E em vez de e.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'

Ao executar este código, você obtém o seguinte resultado -

Output

Percentags = 8.066000E+01

% f

Ele imprime um número de ponto flutuante no formato [-] ddd.dddddd.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'

Ao executar este código, você obtém o seguinte resultado -

Output

Percentags = 80.660000

% g e% G

Usa conversão% e ou% f, o que for mais curto, com zeros não significativos suprimidos.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'

Output

Ao executar este código, você obtém o seguinte resultado -

Percentags = 80.66

o %G formato usa %E em vez de% e.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'

Ao executar este código, você obtém o seguinte resultado -

Output

Percentags = 80.66

% o

Ele imprime um número octal sem sinal.

Example

[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'

Ao executar este código, você obtém o seguinte resultado -

Output

Octal representation of decimal number 10 = 12

%você

Ele imprime um número decimal sem sinal.

Example

[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'

Ao executar este código, você obtém o seguinte resultado -

Output

Unsigned 10 = 10

% s

Ele imprime uma string de caracteres.

Example

[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'

Ao executar este código, você obtém o seguinte resultado -

Output

Name = Sherlock Holmes

% x e% X

Ele imprime um número hexadecimal sem sinal. o%X formato usa letras maiúsculas em vez de minúsculas.

Example

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'

Ao executar este código, você obtém o seguinte resultado -

Output

Hexadecimal representation of decimal number 15 = f

Agora vamos usar% X e observar o resultado -

Example

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'

Ao executar este código, você obtém o seguinte resultado -

Output

Hexadecimal representation of decimal number 15 = F

%%

Imprime um único % caractere e nenhum argumento é convertido.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'

Ao executar este código, você obtém o seguinte resultado -

Output

Percentags = 80%

Parâmetros opcionais com%

Com % podemos usar os seguintes parâmetros opcionais -

Largura

O campo é preenchido com o width. Por padrão, o campo é preenchido com espaços, mas quando o sinalizador 0 é usado, ele é preenchido com zeros.

Example

[jerry]$ awk 'BEGIN { 
   num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2 
}'

Ao executar este código, você obtém o seguinte resultado -

Output

Num1 =         10
Num2 =         20

Zeros à esquerda

Um zero à esquerda atua como um sinalizador, que indica que a saída deve ser preenchida com zeros em vez de espaços. Observe que este sinalizador só tem efeito quando o campo é mais largo do que o valor a ser impresso. O exemplo a seguir descreve isso -

Example

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2 
}'

Ao executar este código, você obtém o seguinte resultado -

Output

Num1 = -0010
Num2 = 00020

Justificação à esquerda

A expressão deve ser justificada à esquerda em seu campo. Quando a string de entrada é menor que o número de caracteres especificados e você deseja que seja justificado à esquerda, ou seja, adicionando espaços à direita, use um símbolo de menos (-) imediatamente após o% e antes do número.

No exemplo a seguir, a saída do comando AWK é canalizada para o comando cat para exibir o caractere END OF LINE ($).

Example

[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte

Ao executar este código, você obtém o seguinte resultado -

Output

Num = 10   $

Sinal de prefixo

Ele sempre prefixa valores numéricos com um sinal, mesmo se o valor for positivo.

Example

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2 
}'

Ao executar este código, você obtém o seguinte resultado -

Output

Num1 = -10
Num2 = +20

Cerquilha

Para% o, ele fornece um zero à esquerda. Para% xe% X, ele fornece um 0x ou 0X à esquerda, respectivamente, apenas se o resultado for diferente de zero. Para% e,% E,% f e% F, o resultado sempre contém um ponto decimal. Para% ge% G, os zeros finais não são removidos do resultado. O exemplo a seguir descreve isso -

Example

[jerry]$ awk 'BEGIN { 
   printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'

Ao executar este código, você obtém o seguinte resultado -

Output

Octal representation = 012
Hexadecimal representation = 0XA