awk 学习笔记

awk分别代表其作者姓氏的第一个字母。

awk 基础

awk语法有两种形式:
awk [-F ERE] [-v assignment] 'program' [argument ...]
awk [-F ERE] -f progfile ... [-v assignment] ...[argument ...]

注意:第一种形式的 命令(program) 必须是用单引号引起。 awk -v a='a b c' 'BEGIN {print a; a=123} END{print a}'

标准的awk命令行参数主要由以下三个:

  • -F ERE:定义字段分隔符,该选项的值可以是一个字符串或扩展的正则表达式(ERE),如: -F: 表示以冒号分隔字段。
  • -f progfile:指定awk脚本,可以同时指定多个脚本,它们会按照在命令行中出现的顺序连接在一起。
  • -v assignment:定义awk变量,形式同awk中的变量赋值,即name=value,赋值发生在awk处理文本之前。

awk是一种编程语言,逐行扫描文件,寻找匹配特定模式的行,并在这些行上执行操作。
awk可以同时指定多个输入文件,如果输入文件的文件名为-,表示从标准输入读取内容。

Awk的输入被解析成多个记录(Record),默认情况下,记录的分隔符是 \n,因此可以认为一行就是一个记录,记录的分隔符可以通过内置变量RS更改。当记录匹配某个pattern时,才会执行后续的action命令。

而每个记录又进一步地被分隔成多个字段(Field),默认情况下字段的分隔符是空白符,例如空格、制表符等等,也可以通过-F ERE选项或者内置变量FS更改。在awk中,可以通过 $1,$2… 来访问对应位置的字段,同时 $0 存放整个记录,这一点有点类似shell下的命令行位置参数。

继续阅读