Open zshuangyan opened 5 years ago
awk命令格式
awk ’program’ input-file1 input-file2 ...
program是指awk程序的内容,需要用单引号围起来,程序后面可以跟一个或者多个文件,awk程序会按序处理这多个文件
如果希望多次使用program,可以把program的内容放入文件中,然后以-f选项来执行
awk -f program-file input-file1 input-file2 ...
program的语法格式
pattern {action} pattern {action} ...
program是由一个或多个规则组成的,awk对读取到的每行,都会遍历程序中的所有规则。规则包含pattern和action两个部分(pattern部分可以省略,即为无条件执行action)。pattern是匹配规则,action是执行动作,action外边被两个大括号包围起来。类似shell的if then语法,只有被pattern匹配中后,才会触发action的执行。
pattern语法 和其他编程语言相似,pattern中一般使用关系表达式,例如: x > 34 是一个Pattern, 判断变量 x 与 34 是否存在大于的关系. x == y 是一个Pattern, 判断变量 x 与变量 y 是否存在等于的关系.
awk 提供 C 语言中常见的关系运算符:
>, <, >=, <=, ==, !=
此外, awk 还提供 ~ (match) 及 !~(not match) 用于正则匹配
其用法与涵义如下:
若 A 为一字符串, B 为一正则表达式(Regular Expression)
A ~ B 判断 字符串A 中是否 包含 能匹配(match)B表达式的子字符串.
A !~ B 判断 字符串A 中是否 不包含 能匹配(match)B表达式的子字符串.
例如 :
"banana" ~ /an/ 整个是一个Pattern.
因为"banana"中含有可以匹配 /an/ 的子字符串, 故此关系式成立(true),整个Pattern的值也是true.
action语法 action中最常见的就是执行print,打印出某行,某列,多个列的组合。下面我们来介绍在print表达式中常常会使用到的变量:
下面是一些例子:
查找mail-list中姓名包含li的条目
$ awk ’$1 ~ /li/ { print $0 }’ mail-list Amelia 555-5553 amelia.zodiacusque@gmail.com F Julie 555-6699 julie.perscrutabor@skeeve.com F
打印第一列和倒数第二列
$ awk '{print $1 $(NF-1)}' mail-list
打印行号
$ awk '{print $NR $0}' mail-list
对某些列进行计算
$ awk '{print $1 $2*$3}' input-file
以“:”作为列的分隔
$ awk -F ':' '{print $1 $NF}' input-file
参考列表: Effective AWK Programming awk入门指南 awk中文手册
awk命令格式
program是指awk程序的内容,需要用单引号围起来,程序后面可以跟一个或者多个文件,awk程序会按序处理这多个文件
如果希望多次使用program,可以把program的内容放入文件中,然后以-f选项来执行
program的语法格式
program是由一个或多个规则组成的,awk对读取到的每行,都会遍历程序中的所有规则。规则包含pattern和action两个部分(pattern部分可以省略,即为无条件执行action)。pattern是匹配规则,action是执行动作,action外边被两个大括号包围起来。类似shell的if then语法,只有被pattern匹配中后,才会触发action的执行。
pattern语法 和其他编程语言相似,pattern中一般使用关系表达式,例如: x > 34 是一个Pattern, 判断变量 x 与 34 是否存在大于的关系. x == y 是一个Pattern, 判断变量 x 与变量 y 是否存在等于的关系.
awk 提供 C 语言中常见的关系运算符:
此外, awk 还提供 ~ (match) 及 !~(not match) 用于正则匹配
其用法与涵义如下:
若 A 为一字符串, B 为一正则表达式(Regular Expression)
A ~ B 判断 字符串A 中是否 包含 能匹配(match)B表达式的子字符串.
A !~ B 判断 字符串A 中是否 不包含 能匹配(match)B表达式的子字符串.
例如 :
"banana" ~ /an/ 整个是一个Pattern.
因为"banana"中含有可以匹配 /an/ 的子字符串, 故此关系式成立(true),整个Pattern的值也是true.
action语法 action中最常见的就是执行print,打印出某行,某列,多个列的组合。下面我们来介绍在print表达式中常常会使用到的变量:
下面是一些例子:
查找mail-list中姓名包含li的条目
打印第一列和倒数第二列
打印行号
对某些列进行计算
以“:”作为列的分隔
参考列表: Effective AWK Programming awk入门指南 awk中文手册