English 中文(简体)
AWK - Pretty Printing
  • 时间:2024-09-08

AWK - Pretty Printing


Previous Page Next Page  

So far we have used AWK s print and printf functions to display data on standard output. But printf is much more powerful than what we have seen before. This function is borrowed from the C language and is very helpful while producing formatted output. Below is the syntax of the printf statement −

Syntax

printf fmt, expr-pst

In the above syntax fmt is a string of format specifications and constants. expr-pst is a pst of arguments corresponding to format specifiers.

Escape Sequences

Similar to any string, format can contain embedded escape sequences. Discussed below are the escape sequences supported by AWK −

New Line

The following example prints Hello and World in separate pnes using newpne character −

Example

[jerry]$ awk  BEGIN { printf "Hello
World
" } 

On executing this code, you get the following result −

Output

Hello
World

Horizontal Tab

The following example uses horizontal tab to display different field −

Example

[jerry]$ awk  BEGIN { printf "Sr No	Name	Sub	Marks
" } 

On executing the above code, you get the following result −

Output

Sr No   Name    Sub Marks

Vertical Tab

The following example uses vertical tab after each filed −

Example

[jerry]$ awk  BEGIN { printf "Sr NovNamevSubvMarks
" } 

On executing this code, you get the following result −

Output

Sr No
   Name
      Sub
         Marks

Backspace

The following example prints a backspace after every field except the last one. It erases the last number from the first three fields. For instance, Field 1 is displayed as Field, because the last character is erased with backspace. However, the last field Field 4 is displayed as it is, as we did not have a  after Field 4.

Example

[jerry]$ awk  BEGIN { printf "Field 1Field 2Field 3Field 4
" } 

On executing this code, you get the following result −

Output

Field Field Field Field 4

Carriage Return

In the following example, after printing every field, we do a Carriage Return and print the next value on top of the current printed value. It means, in the final output, you can see only Field 4, as it was the last thing to be printed on top of all the previous fields.

Example

[jerry]$ awk  BEGIN { printf "Field 1
Field 2
Field 3
Field 4
" } 

On executing this code, you get the following result −

Output

Field 4

Form Feed

The following example uses form feed after printing each field.

Example

[jerry]$ awk  BEGIN { printf "Sr NofNamefSubfMarks
" } 

On executing this code, you get the following result −

Output

Sr No
   Name
      Sub
         Marks

Format Specifier

As in C-language, AWK also has format specifiers. The AWK version of the printf statement accepts the following conversion specification formats −

%c

It prints a single character. If the argument used for %c is numeric, it is treated as a character and printed. Otherwise, the argument is assumed to be a string, and the only first character of that string is printed.

Example

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

Output

On executing this code, you get the following result −

ASCII value 65 = character A

%d and %i

It prints only the integer part of a decimal number.

Example

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

On executing this code, you get the following result −

Output

Percentags = 80

%e and %E

It prints a floating point number of the form [-]d.dddddde[+-]dd.

Example

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

On executing this code, you get the following result −

Output

Percentags = 8.066000e+01

The %E format uses E instead of e.

Example

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

On executing this code, you get the following result −

Output

Percentags = 8.066000E+01

%f

It prints a floating point number of the form [-]ddd.dddddd.

Example

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

On executing this code, you get the following result −

Output

Percentags = 80.660000

%g and %G

Uses %e or %f conversion, whichever is shorter, with non-significant zeros suppressed.

Example

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

Output

On executing this code, you get the following result −

Percentags = 80.66

The %G format uses %E instead of %e.

Example

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

On executing this code, you get the following result −

Output

Percentags = 80.66

%o

It prints an unsigned octal number.

Example

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

On executing this code, you get the following result −

Output

Octal representation of decimal number 10 = 12

%u

It prints an unsigned decimal number.

Example

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

On executing this code, you get the following result −

Output

Unsigned 10 = 10

%s

It prints a character string.

Example

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

On executing this code, you get the following result −

Output

Name = Sherlock Holmes

%x and %X

It prints an unsigned hexadecimal number. The %X format uses uppercase letters instead of lowercase.

Example

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

On executing this code, you get the following result −

Output

Hexadecimal representation of decimal number 15 = f

Now let use %X and observe the result −

Example

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

On executing this code, you get the following result −

Output

Hexadecimal representation of decimal number 15 = F

%%

It prints a single % character and no argument is converted.

Example

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

On executing this code, you get the following result −

Output

Percentags = 80%

Optional Parameters with %

With % we can use following optional parameters −

Width

The field is padded to the width. By default, the field is padded with spaces but when 0 flag is used, it is padded with zeroes.

Example

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

On executing this code, you get the following result −

Output

Num1 =         10
Num2 =         20

Leading Zeros

A leading zero acts as a flag, which indicates that the output should be padded with zeroes instead of spaces. Please note that this flag only has an effect when the field is wider than the value to be printed. The following example describes this −

Example

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

On executing this code, you get the following result −

Output

Num1 = -0010
Num2 = 00020

Left Justification

The expression should be left-justified within its field. When the input-string is less than the number of characters specified, and you want it to be left justified, i.e., by adding spaces to the right, use a minus symbol (–) immediately after the % and before the number.

In the following example, output of the AWK command is piped to the cat command to display the END OF LINE($) character.

Example

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

On executing this code, you get the following result −

Output

Num = 10   $

Prefix Sign

It always prefixes numeric values with a sign, even if the value is positive.

Example

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

On executing this code, you get the following result −

Output

Num1 = -10
Num2 = +20

Hash

For %o, it supppes a leading zero. For %x and %X, it supppes a leading 0x or 0X respectively, only if the result is non-zero. For %e, %E, %f, and %F, the result always contains a decimal point. For %g and %G, traipng zeros are not removed from the result. The following example describes this −

Example

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

On executing this code, you get the following result −

Output

Octal representation = 012
Hexadecimal representation = 0XA
Advertisements