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

Field Separators and Record Separators

FS and RS govern how AWK splits input into fields and records, while OFS and ORS control how output is reassembled; mastering them unlocks CSV, multiline, and custom-delimited parsing.

Patterns & VariablesIntermediate10 min readJul 10, 2026
Analogies

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.

awk
# 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.txt

In 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

Was this page helpful?

Topics covered

#Programming#AWKStudyNotes#FieldSeparatorsAndRecordSeparators#Field#Separators#Record#Splitting#StudyNotes#SkillVeris#ExamPrep