Records and Fields
AWK divides its input into records and each record into fields. By default a record is a single line, defined by the record separator RS being a newline, and fields are the whitespace-separated chunks within that line. You reference fields positionally: $1 is the first field, $2 the second, and $NF is always the last field because NF holds the number of fields. The whole record is $0. Runs of spaces and tabs collapse into a single delimiter under the default field separator, so extra spacing between columns does not create empty fields.
Cricket analogy: Records and fields are like an innings scorecard: each row is a batsman's record, and columns like runs, balls, and strike rate are the fields you read off positionally.
NR, NF, and Positional Access
Two built-in variables track your position and shape. NR is the running count of records seen so far across all input, so it doubles as a line number. NF is the number of fields on the current record, updated for every line. You can compute field references dynamically: $(NF-1) is the second-to-last field, and $i inside a loop lets you walk across columns. Assigning to a field, like $2 = "redacted", modifies the record; if you then print $0, AWK rebuilds it using the output field separator OFS.
Cricket analogy: NR counting records is like the ball-by-ball counter on the scoreboard, ticking up with every delivery, while $(NF-1) is like reaching for the second-slip fielder rather than the last.
Separators: FS, OFS, RS, ORS
Four variables control splitting and joining. FS is the input field separator (default whitespace); set it with -F',' or in BEGIN to parse CSV-like data. OFS is the output field separator that print inserts between comma-separated arguments (default a single space). RS is the input record separator (default newline); set RS to an empty string to enable paragraph mode, where blank lines delimit multi-line records. ORS is the output record separator that print appends (default newline). Changing FS at runtime affects only lines read afterward, so it is best set in BEGIN or on the command line.
Cricket analogy: FS and OFS are like the gaps between overs on a scoreboard: FS tells you where one over's data ends on input, OFS decides how wide the gaps look on the printed sheet.
# Parse a CSV: set FS to comma, print name and last column
awk -F',' '{ print $1, $NF }' people.csv
# Set input and output separators explicitly in BEGIN
awk 'BEGIN { FS=","; OFS=" | " } { print $1, $3 }' data.csv
# Redact the second field, then reprint the rebuilt record
awk 'BEGIN { OFS="\t" } { $2 = "REDACTED"; print $0 }' users.tsv
# Paragraph mode: blank lines separate multi-line records
awk 'BEGIN { RS="" } { print NR, "paragraph has", NF, "fields" }' notes.txtAssigning to a field or to NF forces AWK to rebuild $0 using OFS, not the original separators. A file read with FS=',' but default OFS (a space) will print space-separated after any field assignment, silently changing your delimiter. Set OFS to match FS when you need to preserve the format.
- Input is split into records (default: lines) and fields (default: whitespace-separated columns).
- Fields are $1..$NF; $0 is the whole record; $NF and $(NF-1) reach the last and second-to-last.
- NR is the running record count (line number); NF is the field count for the current line.
- FS/OFS control field separators on input/output; RS/ORS control record separators.
- Use -F',' or set FS in BEGIN to parse CSV-like data reliably.
- Assigning to a field rebuilds $0 with OFS, which can change your output delimiter.
Practice what you learned
1. Which expression always refers to the last field of the current record?
2. What does the variable NR represent?
3. How do you tell AWK to split fields on commas from the command line?
4. What is a side effect of assigning a new value to a field like $2?
5. What does setting RS to an empty string enable?
Was this page helpful?
You May Also Like
What Is AWK?
AWK is a compact, data-driven programming language built for scanning text files line by line and reacting to patterns. It excels at extracting columns, computing summaries, and reshaping structured text.
AWK Pattern-Action Syntax
Every AWK program is a sequence of pattern { action } rules. Understanding how patterns select lines and actions transform them is the core mental model of the whole language.
Your First AWK One-Liner
Walk through building practical AWK one-liners step by step: printing columns, filtering rows, summing fields, and counting lines. These small programs cover a huge share of everyday text tasks.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics