Instiq
Chapter 3 · GNU and Unix Commands·v1.0.0·Updated 7/6/2026·~12 min

What's changed: Initial version (topic 1.03, subtopics 1.03.1–1.03.5)

3.2Processing Text Streams with Filters

Key points

Learn filters—commands that transform stdin to stdout: viewers (cat, less, head, tail), extract/format (cut, sort, uniq, wc, nl, tr), join/split (paste, join, split), and others (sed, od, expand/unexpand, fmt, pr).

The UNIX philosophy: combine small tools. Chaining single-purpose filters with pipes turns log analysis and CSV munging into one-liners. This section stocks the toolbox; the next covers the plumbing (pipes).

3.2.1Viewing, extracting, counting

  • View with cat (concatenate all), less (pager, both directions), head/tail (first/last n lines; tail -f follows a growing log).
  • Extract with cut (-d, -f2 = delimiter and field); translate with tr (character replace/delete, tr a-z A-Z); number lines with nl.
  • Aggregate with sort (-n numeric, -r reverse) → uniq (dedupe adjacent lines; -c counts) → wc (-l lines). Rule: uniq expects sorted input.

3.2.2Joining, splitting, and the rest

  • paste glues files side by side by line; join merges two files on a common field; split cuts a large file into fixed-size/line chunks.
  • sed is the stream editor (sed 's/old/new/g' substitution; more in 3.4); od dumps binary in octal/hex.
  • Whitespace/layout: expand/unexpand (tabs ⇔ spaces), fmt (reflow line width), pr (paginate for printing).
Exam point

Standard pairings: skim a log = less, watch appends = tail -f, 2nd CSV column = cut -d, -f2, count duplicates = sort → uniq -c, uppercase = tr, tabs→spaces = expand. The top trap: uniq alone cannot remove non-adjacent duplicates (sort first).

One real pipeline makes the roles click. "Top IPs in an access log": cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -5cut grabs field 1 (the IP) → sort makes equal IPs adjacent → uniq -c dedupes with counts → sort -nr orders by count desc → head keeps the top 5. Each filter never edits the file; it transforms the stream and passes it on—internalize that and you are exam-ready. join is a relational merge on a key (employee ID ⇔ name); do not confuse it with paste, which just glues lines side by side. split takes an output prefix: split -l 1000 big.log part_. With od for peeking into binaries and pr for print layout, learn the tools as a when-to-use table.

GoalCommandKey point
Watch a growing logtail -fFollows in real time
Extract a CSV fieldcut -d, -f2-d delimiter, -f field
Count duplicate linessort | uniq -cuniq sees adjacent lines only
Merge two tables on a keyjoinSide-by-side glue is paste
Warning

Trap: "uniq removes all duplicate lines in a file" is wrong—uniq only compares adjacent lines, so sort first. "cat is best for viewing large files" is also practically wrong—less pages both ways; cat is for concatenation and small files.

Filter commands organized into viewing, transforming, and aggregating.
Always sort before uniq

3.2.3Section summary

  • View = cat/less/head/tail(-f), extract = cut, translate = tr, aggregate = sort → uniq(-c) → wc (uniq after sort)
  • Combine = paste (side) / join (keyed), split = split; plus sed/od/expand/fmt/pr

Sign in to track progress — Log in.

Quick check

(just a quick review)

Q1. You want only the second field from a comma-separated CSV. Which command?

Q2. You want duplicate lines listed with their occurrence counts. Which combination?

Q3. You want to continuously display lines as they are appended to a live application log. Which command?

Check your understandingPractice questions for Chapter 3: GNU and Unix Commands