From e11a40237c552b2661502ac1e72f8e526317fb18 Mon Sep 17 00:00:00 2001 From: Managor <42655600+Managor@users.noreply.github.com> Date: Sat, 17 May 2025 20:51:35 +0300 Subject: [PATCH] gawk: add GNU version of awk (#16491) * Create gawk.md --------- Co-authored-by: Fazle Arefin Co-authored-by: Sebastiaan Speck <12570668+sebastiaanspeck@users.noreply.github.com> --- pages/common/awk.md | 2 ++ pages/common/gawk.md | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 pages/common/gawk.md diff --git a/pages/common/awk.md b/pages/common/awk.md index fc1346bd2d..1aabdb8743 100644 --- a/pages/common/awk.md +++ b/pages/common/awk.md @@ -1,6 +1,8 @@ # awk > A versatile programming language for working on files. +> Note: Different implementations of AWK often make this a symlink of their binary. +> See also: `gawk`. > More information: . - Print the fifth column (a.k.a. field) in a space-separated file: diff --git a/pages/common/gawk.md b/pages/common/gawk.md new file mode 100644 index 0000000000..aad1e467aa --- /dev/null +++ b/pages/common/gawk.md @@ -0,0 +1,37 @@ +# gawk + +> GNU version of awk, a versatile programming language for working on files. +> See also: `awk`. +> More information: . + +- Print the fifth column (a.k.a. field) in a space-separated file: + +`gawk '{print $5}' {{path/to/file}}` + +- Print the second column of the lines containing "foo" in a space-separated file: + +`gawk '/{{foo}}/ {print $2}' {{path/to/file}}` + +- Print the last column of each line in a file, using a comma (instead of space) as a field separator: + +`gawk {{[-F|--field-separator]}} ',' '{print $NF}' {{path/to/file}}` + +- Sum the values in the first column of a file and print the total: + +`gawk '{s+=$1} END {print s}' {{path/to/file}}` + +- Print every third line starting from the first line: + +`gawk 'NR%3==1' {{path/to/file}}` + +- Print different values based on conditions: + +`gawk '{if ($1 == "foo") print "Exact match foo"; else if ($1 ~ "bar") print "Partial match bar"; else print "Baz"}' {{path/to/file}}` + +- Print all the lines which the 10th column value is between a min and a max: + +`gawk '($10 >= {{min_value}} && $10 <= {{max_value}})'` + +- Print table of users with UID >=1000 with header and formatted output, using colon as separator (`%-20s` mean: 20 left-align string characters, `%6s` means: 6 right-align string characters): + +`gawk 'BEGIN {FS=":";printf "%-20s %6s %25s\n", "Name", "UID", "Shell"} $4 >= 1000 {printf "%-20s %6d %25s\n", $1, $4, $7}' /etc/passwd`