gawk - pattern scanning and processing language
awk [-F SEP] [-v VAR=VAL] 'PROGRAM' [file]...
Options you will use
-F SEP- Input field separator. -F: for /etc/passwd, -F, for CSV.
-v VAR=VAL- Set a variable before the program runs.
'PATTERN {ACTION}'- Run ACTION on every line matching PATTERN. Either may be omitted.
BEGIN / END- Blocks that run before the first line and after the last.
$0 $1 $N NF NR FS OFS- Whole line, fields, field count, record number, separators.
Examples
$ awk -F: '$3 >= 1000 {print $1}' /etc/passwdreal login users - and the surprise: nobody has UID 65534
$ awk '{sum+=$10} END {print sum}' access.logtotal bytes served
$ awk '$9 ~ /^5/ {c[$1]++} END {for (ip in c) print c[ip], ip}' access.log | sort -rnwho is causing the 5xx
$ awk '{s+=$NF} END {printf "%.3f\n", s/NR}'average of the last field
Gotchas
- awk splits on runs of whitespace by default, which is exactly what cut cannot do.
Try gawk in a real terminal Free, in your browser - a real Ubuntu terminal to try it in, with missions that check your work.