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