awk performs a number of actions automatically when it parses lines: it updates the variable NF, which contains the number of fields on a line; and it parses the record into a series of fields which are accessible via the variables $1, $2, $3 and so on. The variable $0 contains the entire line.
Though you might consider $1 as a variable, it's not exactly true, in fact $ is the field reference operator and 1 is just a number that tells awk you want to reference the first field. They behave a bit like an array ie where with an array you would write fields in awk you write $1
You can replace 1 by an expression, thus $(10-9) also refers to first field. Since the variable NF contains the number of fields on a line, and since fields are indexed starting from 1, $(NF) (or just $NF) contains the last field in any given record.
For those who won't take the time to read this whole faq
print $1 # prints the first field print $(10-9) # again the first field i=1;print $i # yes it prints the first field print $NF # prints the last field print $(NF-1) # prints the field before the last one
(Note that you can assign these fields, but that's another story
See the GNU awk manual entries for..: