(gawk.info) I/O And BEGIN/END
Info Catalog
(gawk.info) Using BEGIN/END
(gawk.info) BEGIN/END
Input/Output from `BEGIN' and `END' Rules
.........................................
There are several (sometimes subtle) issues involved when doing I/O
from a `BEGIN' or `END' rule.
The first has to do with the value of `$0' in a `BEGIN' rule. Since
`BEGIN' rules are executed before any input is read, there simply is no
input record, and therefore no fields, when executing `BEGIN' rules.
References to `$0' and the fields yield a null string or zero,
depending upon the context. One way to give `$0' a real value is to
execute a `getline' command without a variable ( Explicit Input
with `getline' Getline.). Another way is to simply assign a value to
it.
The second point is similar to the first, but from the other
direction. Inside an `END' rule, what is the value of `$0' and `NF'?
Traditionally, due largely to implementation issues, `$0' and `NF' were
_undefined_ inside an `END' rule. The POSIX standard specified that
`NF' was available in an `END' rule, containing the number of fields
from the last input record. Due most probably to an oversight, the
standard does not say that `$0' is also preserved, although logically
one would think that it should be. In fact, `gawk' does preserve the
value of `$0' for use in `END' rules. Be aware, however, that Unix
`awk', and possibly other implementations, do not.
The third point follows from the first two. What is the meaning of
`print' inside a `BEGIN' or `END' rule? The meaning is the same as
always, `print $0'. If `$0' is the null string, then this prints an
empty line. Many long time `awk' programmers use `print' in `BEGIN'
and `END' rules, to mean `print ""', relying on `$0' being null. While
you might generally get away with this in `BEGIN' rules, in `gawk' at
least, it is a very bad idea in `END' rules. It is also poor style,
since if you want an empty line in the output, you should say so
explicitly in your program.
Info Catalog
(gawk.info) Using BEGIN/END
(gawk.info) BEGIN/END
automatically generated byinfo2html