aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/awk.md
diff options
context:
space:
mode:
authorjohannst <johannes.stoelp@gmail.com>2020-03-17 23:48:21 +0100
committerjohannst <johannes.stoelp@gmail.com>2020-03-17 23:48:21 +0100
commitfb719f52b73920fb18c7f3080ebb1fc73300be49 (patch)
tree6e71c03f2acf38e9611bd0c80ac11188056f621c /src/awk.md
parent62c9575f7827fb44f24b90a8f8c9d4f1f9f8f1c7 (diff)
downloadnotes-fb719f52b73920fb18c7f3080ebb1fc73300be49.tar.gz
notes-fb719f52b73920fb18c7f3080ebb1fc73300be49.zip
added awk
Diffstat (limited to 'src/awk.md')
-rw-r--r--src/awk.md44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/awk.md b/src/awk.md
new file mode 100644
index 0000000..0186416
--- /dev/null
+++ b/src/awk.md
@@ -0,0 +1,44 @@
+# awk(1)
+
+```markdown
+awk [opt] program [input]
+ -F <sepstr> field separator string (can be regex)
+ program awk program
+ input file or stdin if not file given
+```
+
+## Input processing
+
+Input is processed in two stages:
+1. Splitting input into a sequence of `records`.
+ By default split at `newline` character, but can be changed via the
+ builtin `RS` variable.
+2. Splitting a `record` into `fields`. By default strings without `whitespace`,
+ but can be changed via the builtin variable `FS` or command line option
+ `-F`.
+
+Field are accessed as follows:
+- `$0` whole `record`
+- `$1` field one
+- `$2` field two
+- ...
+
+## Program
+
+An `awk` program is composed of pairs of the form:
+```markdown
+pattern { action }
+```
+The program is run against each `record` in the input stream. If a `pattern`
+matches a `record` the corresponding `action` is executed and can access the
+`fields`.
+
+```markdown
+INPUT
+ |
+ v
+record ----> ∀ pattern matched
+ | |
+ v v
+fields ----> run associated action
+```