Gawk usage: Difference between revisions
From wikinotes
(→Stdin) |
(→Stdin) |
||
Line 2: | Line 2: | ||
= Stdin = | = Stdin = | ||
<blockquote> | |||
== tokenizing == | |||
<blockquote> | <blockquote> | ||
by default, each space-separated item on stdin is an argument.<br> | by default, each space-separated item on stdin is an argument.<br> | ||
Line 13: | Line 15: | ||
echo 'aa|bb|cc' | awk -F'|' '{print $2}' # bb | echo 'aa|bb|cc' | awk -F'|' '{print $2}' # bb | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</blockquote><!-- tokenizing --> | |||
== multiline matching == | |||
<blockquote> | |||
Match a line, then return N words afterwards. | |||
<syntaxhighlight lang="bash"> | |||
# Find the line state UP, then print the line 2 lines afterwards | |||
# (each 'getline' returns the next line) | |||
ip addr \ | |||
| awk -F" " '/state UP/ { getline;getline; print $0 }' \ | |||
</syntaxhighlight> | |||
</blockquote><!-- multiline matching --> | |||
</blockquote><!-- Stdin --> | </blockquote><!-- Stdin --> | ||
Revision as of 01:12, 19 July 2021
Awk is a versatile glue language, and it can be used in a few ways.
Stdin
tokenizing
by default, each space-separated item on stdin is an argument.
you can use this to quickly extract space separated lines.echo 'aa bb cc' | awk '{print $2}' # bbyou can also choose the token used to split the string
echo 'aa|bb|cc' | awk -F'|' '{print $2}' # bbmultiline matching
Match a line, then return N words afterwards.
# Find the line state UP, then print the line 2 lines afterwards # (each 'getline' returns the next line) ip addr \ | awk -F" " '/state UP/ { getline;getline; print $0 }' \
Commands
awk is useful on it's own, for it's ability to do floating point math in bash.
awk 'BEGIN {print 1.5 / 2}' # 0.75
Scripting
run an awk file from interpreter
awk -f file.awk [arg..] # run awk scriptOr use a shebang to indicate script runs in awk
#!/usr/bin/env awk -f # foo.awkand run it directly
./foo.awk