awk
awk被设计用于文本处理,通常被用来做数据提取和报告工具工作,可以看作一种解释性程序设计语言。典型应用就是将文本数据转换成格式化的报表,所有这些操作的关键前提是数据拥有某种结构,当数据拥有某种结构时,才能最好体现awk的价值。
awk中的程序和大部分其他语言程序不同,awk是数据驱动的,而其他大部分语言是过程化的,意会一下即可。
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。注意,awk不能处理非文本文件,比如,二进制可执行文件等,如有需要,可以使用类似emacs中的hexlmode等二进制编辑器 to do it。
命令格式
awk [OPTIONS] [--] program-text file ...
awk [OPTIONS] -f program-file [--] file ...
一个awk命令行由选项、awk程序文件或指令、输入文件名组成。每条指令指定一个用于搜索的模式和一个模式匹配时要执行的动作。即 awk指令=模式+动作。
// awk 中,花括号用来将指令块集合在一起
pattern { action } // 每条指令之间用换行符来分隔
pattern { action }
...
简单来看,awk 命令使用方法 : awk '{pattern + action}' {filenames}
尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
常用选项
-F 指定分隔符
-v var=value 指定一个值value给变量var
-f 指定一个awk程序文件
语法
awk 的 BEGIN 和 END 块
awk使用正则表达式
awk的表达式和块
awk的条件语句
awk中的变量和操作符
awk中的特殊变量
FS、NF、NR、$0、$1 ...
awk中的循环结构
awk中的数组
awk下的数组索引从1开始,不是从0开始。
当awk遇到第一个赋值时,数组被创建。
awk循环数组索引时,并不遵循特定的顺序。
awk_help
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options: GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options: GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.
gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.
Examples:
gawk '{ sum += $1 }; END { print sum }' file
gawk -F: '{ print $1 }' /etc/passwd
参考:Linux awk命令详解 - 小a玖拾柒 - 博客园
Have Fun