100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Programming

Built-in Variables in AWK

AWK ships with a set of predefined variables such as NR, NF, FS, and OFS that expose the current record, field counts, and formatting controls without any setup.

Patterns & VariablesBeginner9 min readJul 10, 2026
Analogies

What Are Built-in Variables?

Built-in variables are special names that AWK maintains automatically as it reads input. You never declare them; the interpreter populates and updates them for every record and field. The most frequently used ones are NR (the number of the current record, counting from 1 across all input), NF (the number of fields in the current record), $0 (the entire current line), and $1 through $NF (individual fields). Because AWK refreshes these on each line, you can reference them anywhere in a pattern or action and they always reflect the line being processed at that moment.

🏏

Cricket analogy: Like a live scoreboard that auto-updates NR as balls bowled and NF as runs off the current ball — you never wind the counter by hand, the scorer does it as each delivery lands.

Record and Field Counters: NR, NF, and FNR

NR counts every record seen since AWK started, so when processing multiple files it keeps climbing across file boundaries. FNR resets to 1 at the start of each new file, which lets you detect where one file ends and another begins. NF holds the field count for the current record and is recomputed each line; assigning a new value to a field beyond NF automatically extends the record and updates NF. A common idiom, $NF, references the last field regardless of how many fields the line has, which is handy for lines of varying width.

🏏

Cricket analogy: NR is the overall team total across both innings while FNR is the current innings score that resets after the follow-on — same match, two different running counts like AWK's two counters.

Separator and Formatting Variables

FS is the input field separator (default: whitespace runs), and OFS is the output field separator used when you print fields separated by commas. RS is the input record separator (default: newline) and ORS is the output record separator appended after each print. SUBSEP separates subscripts in multidimensional array keys. Changing OFS alone does not reformat $0 until you force a rebuild — assigning $1=$1 triggers AWK to reconstruct the record using the current OFS, a classic trick for normalising delimiters.

🏏

Cricket analogy: FS and OFS are like the difference between how the umpire reads the field placement and how the commentator announces it — same data, input and output conventions differ.

awk
# Show line number, field count, and last field of /etc/passwd
awk -F: '{ print NR, NF, $NF }' /etc/passwd

# Track per-file line numbers across two files
awk '{ print FILENAME, FNR, NR, $0 }' file1.txt file2.txt

# Convert a space-delimited line to CSV by changing OFS and rebuilding
echo "alice 30 engineer" | awk 'BEGIN{OFS=","} { $1=$1; print }'
# -> alice,30,engineer

FILENAME holds the name of the file currently being read; it is empty while reading standard input in most AWK implementations and is unset inside a BEGIN block because no file has been opened yet.

Assigning to NF can silently truncate or pad a record: setting NF to a smaller number drops trailing fields, while a larger number creates empty fields. Likewise, editing any field rebuilds $0 using OFS, which can change your line's delimiters unexpectedly.

  • NR counts records across all input; FNR resets to 1 for each new file.
  • NF is the field count of the current record; $NF references the last field.
  • FS/OFS control input/output field separators; RS/ORS control record separators.
  • $0 is the whole record; $1..$NF are individual fields, all auto-updated per line.
  • Reassigning $1=$1 forces AWK to rebuild $0 using the current OFS.
  • FILENAME gives the current file name but is unavailable in BEGIN.
  • Assigning to NF or a field mutates the record and can alter delimiters.

Practice what you learned

Was this page helpful?

Topics covered

#Programming#AWKStudyNotes#BuiltInVariablesInAWK#Built#Variables#AWK#Record#StudyNotes#SkillVeris#ExamPrep