| Previous | Table of Contents | Next |
The printf command can send output to the same destinations as listed in the table describing the print command.
The printf is a much more sophisticated output statement. It generates formatted output. The general format of the printf statement is
printf( format, expr 1, expr 2, ...,expr n )
The parentheses are not necessary. The format argument is always required. The format argument specifies how to format each of the expressions expr. Each specification begins with a % sign. For example,
printf ("%-10s %5d %%%2s\n", $1, $2, $3 )
prints the first field left-justified in a 10-column output field; the second field is right-justified in a five-column output field; and the third field is left-justified in a two-column output field preceded by a percent sign.
The following table defines the formats available for use with the printf command.
|
|
|
| Character | Prints the Expression as |
|---|---|
|
|
|
| c | A single ASCII character. |
| d | A decimal integer. |
| e | In exponential notation. The format is [-]d.ddddddE[+-]dd. |
| f | In exponential notation. The format is [-]ddd.dddddd. |
| g | Uses the shorter of e or f conversion and suppresses nonsignificant zeros. |
| o | An unsigned octal number. |
| s | A string of characters. |
| x | An unsigned hexadecimal number. |
| % | Prints the % sign. No related argument is needed. |
|
|
|
Constants may be placed in the format string to print as themselves. Escape sequences may also be placed in the format argument. Refer to the section Escape Sequences for a list of valid escape sequences supported by the printf function.
Variable printf Format The format part of the printf statement may be a constant or a variable. The ability to use a variable allows you to have variable formatting. For example,
echo | nawk '{
for ( i = 1 ; i <= 20; i++ ) {
format="%"i"s\n"
printf(format, i)
}}'
prints the number from 1 to 20 with 0 to 19 spaces preceding the number.
Closing Files and Pipes Once you open a file or pipe for output writing, it remains open for further writing until you close it. Each file and pipe are referenced by unique expressions. For example, if you write to a file
print > "mynawkoutfile"
then it remains open until you close it. To close the file you must refer to it by the exact same name. For example,
close("mynawkoutfile")
The closing of files is necessary if you write to a file, then want to read it in later in the same nawk program.
Control-Flow Statements
Nawk provides many of the control-flow statements found in the C programming language. It has the if-else statement for decision making tasks. The looping statements of while, for, and do are supported, as well as various other statements. The following table briefly defines the control-flow statements provided in nawk.
|
|
|
| Statement | Description |
|---|---|
|
|
|
| { statements } | Groups a set of single statements into a group. These braces are inside the
action braces. For example,
/John/ { if ( $3 > "18" )
{ print
adults++ }
}
The outside set of braces are action braces. The inside set are grouping braces. They force all the statements to be executed if the if statement is true. Normally only the first statement after the if is executed. |
| break | Immediately exit present loop structure. For example,
i = 1
while ( i <= 100 )
if ! ( i % 2 )
print
else if ( Array[i] == "END" )
break
This loop counts from 1 to 100 and displays even numbers only. If the string "END" is encountered in the Array, then the loop is exited immediately. |
| continue | Immediately start the next iteration of the enclosing for, while, or do loop. |
| do statement while (expression ) | Execute the statement. If the expression is true, repeat the loop; if not, exit the loop. |
| exit | Exit processing the pattern and action commands and process the END section. |
| exit expression | Exit the nawk program and return the value of the expression as the program status code. |
| for ( expr 1; expr2; expr3) statement | Set expr1, loop while expr2 is true, and perform expr3
before the next iteration of the loop is executed. For example,
for ( i = 1; i < 100; i++ )
printf "%10d\n", i
prints the numbers from 1 to 100 in a 10-column output field. |
| for ( variable in array ) statement | Execute statement for each element in the array with
variable set to the next subscript. For example,
split("1 2 3 4 5", NUMS)
for ( N in NUMS )
print NUMS[N]
prints the numbers from 1 through 5 from array NUMS. |
| if ( expression ) statement | If expression is true, then execute statement. For example,
if ( $1 == 100 )
exit
causes the nawk program to exit after reading the first 100 lines of input. |
| if( expression ) statement1 else statement2 | If expression is true, execute statement1, else execute statement2 |
| next | Start the next iteration of the main input loop. The next input record is read in and processed immediately. |
| while ( expression ) statement | If expression is true, execute the statement and repeat the
loop. For example,
i = 100 while ( i >= 1 ) print array[i--] prints the elements of an array in reverse order. |
| ; | The empty statement |
|
|
|
| Previous | Table of Contents | Next |