Splitting Input into Fields with FS
FS, the field separator, tells AWK how to break each record into $1, $2, and so on. By default FS is a single space, which AWK treats specially: it splits on any run of whitespace and ignores leading and trailing blanks. Set FS to a single character like a colon for /etc/passwd, or to a regular expression such as [,:] to split on either commas or colons. You can set it on the command line with -F',' or inside a BEGIN block with FS=",". A crucial subtlety: the default whitespace behavior disappears the moment you set FS to a literal space " " versus leaving it at default, and setting FS to a single tab makes empty fields between consecutive tabs significant.
Cricket analogy: FS is like deciding what counts as a boundary line on the field — change it and the same shot is scored differently, just as changing the separator re-carves a line into different fields.
Records and RS: Beyond Line-by-Line
RS, the record separator, defines where one record ends and the next begins; its default is the newline, so AWK is naturally line-oriented. Setting RS to an empty string "" enables paragraph mode, where records are separated by one or more blank lines and newlines within a paragraph become field separators automatically. In GNU AWK (gawk), RS can be a full regular expression, letting you split on multi-character or variable delimiters like RS="\n---\n" for Markdown-style dividers. Combined with a custom FS, this makes AWK capable of parsing structured, multi-line records that other line-based tools struggle with.
Cricket analogy: RS is like defining what ends an over — normally six balls, but switch the rule and a whole session becomes one record, changing what AWK treats as a single unit.
Reassembling Output with OFS and ORS
OFS and ORS are the output counterparts of FS and RS. OFS is placed between arguments when you use print with comma-separated expressions, defaulting to a single space; ORS is appended after each print, defaulting to a newline. Because AWK only reassembles $0 from fields when a field is modified, changing OFS has no visible effect until you touch a field or reassign $1=$1. Setting ORS to something like ";" lets you join all records onto one line, and setting OFS to a tab or comma is the standard way to convert between delimited formats. These four variables together form a complete, symmetric parsing-and-emitting pipeline.
Cricket analogy: OFS and ORS are like how the commentary team reassembles the scorecard for broadcast — the delimiter between runs and the break between overs, mirroring how the innings was originally recorded.
# Parse a colon-delimited file, output as CSV
awk -F: 'BEGIN{OFS=","} { $1=$1; print }' /etc/passwd
# Paragraph mode: count words in each blank-line-separated block
awk 'BEGIN{RS=""; FS="\n"} { print "Block", NR, "has", NF, "lines" }' notes.txt
# gawk regex RS: split on '---' dividers, print first line of each record
gawk 'BEGIN{RS="\n---\n"} { print $1 }' document.md
# Join all records onto one semicolon-separated line
awk 'BEGIN{ORS=";"} { print $1 }' names.txtIn paragraph mode (RS=""), newlines always act as field separators in addition to whatever FS you set, so a paragraph's individual lines become fields even if FS is a comma. This is a deliberate convenience for processing multi-line records.
Regex-valued RS is a GNU AWK (gawk) extension; POSIX AWK and mawk only accept a single-character RS. Scripts relying on RS="\n---\n" will behave differently or fail on non-gawk interpreters, so check your target environment before depending on it.
- FS splits records into fields; its default (single space) collapses whitespace runs specially.
- FS can be a single character or a full regular expression, set via -F or FS=.
- RS defines record boundaries; the default is newline, making AWK line-oriented.
- RS="" enables paragraph mode where blank lines separate records and newlines split fields.
- gawk allows a regex RS for multi-character delimiters; POSIX AWK does not.
- OFS and ORS reassemble output; OFS changes need a field rebuild to show.
- Together FS/RS/OFS/ORS convert between delimited and multi-line formats.
Practice what you learned
1. What is special about AWK's default field separator?
2. What does setting RS to an empty string do?
3. Which AWK implementation supports a regular-expression RS?
4. Why might changing OFS produce no visible change in output?
5. How do you split fields on either a comma or a colon?
Was this page helpful?
You May Also Like
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 and Regular Expressions
AWK programs are pattern-action pairs; patterns can be regular expressions, relational tests, or ranges that decide which records an action runs on.
BEGIN and END Blocks
BEGIN runs once before any input is read and END runs once after all input is consumed, giving AWK programs a clean place for setup, headers, and final aggregate reporting.
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