AWK编程语言笔记第二章:语法结构

1 准备数据
$ vi countries
$ cat countries
ussr 8689 275 asia
canada 3852 25 north america
china 3705 1032 asia
usa 3615 237 north america
brazil 3286 134 sourth america
india 1267 746 asia
mexico 762 78 north america
france 211 55 europe
japan 144 120 asia
germany 96 61 europe
england 94 56 europe
2 模式

在这里插入图片描述
BEGIN 在awk读取前执行,END在awk读取后执行。

在这里插入图片描述

2.1 比较运算符

在这里插入图片描述

2.2 字符串匹配

在这里插入图片描述

2.3 正则表达式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 转义字符

在这里插入图片描述

2.5 复合模式

在这里插入图片描述

$ awk '$4 ~ /^(asia|europe)$/ {print $0}' countries
ussr 8689 275 asia
china 3705 1032 asia
...

$ awk '$4 ~ /asia/ || /europe/ {print $0}' countries
ussr 8689 275 asia
...
england 94 56 europe

$ awk '$4 ~ /asia|europe/ {print $0}' countries
ussr 8689 275 asia
...
england 94 56 europe

$ awk '$4 !~ /asia|europe/ {print $0}' countries
canada 3852 25 north america
...
mexico 762 78 north america
2.6 Range Patterns

范围模式匹配 pat1 和 pat2 之间的每一行;pat2 可以与 pat1 匹配同一行,使范围为单行。

每当范围的第一个模式匹配时,就开始匹配;如果随后没有找到第二个模式的实例,则匹配到输入末尾的所有行。

/Canada/, /USA/
$ awk '$4 ~ /europe/,/africa/ {print $0}' countries
france 211 55 europe
japan 144 120 asia
germany 96 61 europe
england 94 56 europe

# 第一行至第2行
$ awk 'NR==1,NR==2 {print $0}' countries
ussr 8689 275 asia
canada 3852 25 north america

# 第一行至第五行
$ awk 'FNR==1,FNR==5 {print FILENAME ":" $0}' countries
countries:ussr 8689 275 asia
countries:canada 3852 25 north america
countries:china 3705 1032 asia
countries:usa 3615 237 north america
countries:brazil 3286 134 sourth america
3 动作

在这里插入图片描述

3.1 内置变量

在这里插入图片描述

3.2 数学运算符

在这里插入图片描述

$ awk '{print ($2 >200 ? $2:"$2 less than 200" NR)}' countries
8689
3852
3705
3615
3286
1267
762
211
$2 less than 2009
$2 less than 20010
$2 less than 20011

$ awk '$4=="asia" {pop=pop+$3;n=n+1}                                                   
END {print "total population of the",n,
    "asian countries is " ,pop,"million."}' countries
total population of the 4 asian countries is  2173 million.

$ awk '$3>maxpop {maxpop=$3;country=$1}
> END {print "contry with largest population:", country,maxpop}' countries
contry with largest population: china 1032
3.3 内置数学函数

在这里插入图片描述

# 字符串作为表达式
$ awk 'BEGIN {digits="^[0-9]+$"}
$2 ~ digits {print $0}' countries
ussr 8689 275 asia
canada 3852 25 north america
...

$ awk 'BEGIN {
}
sign = "[+-]?"
decimal= "[0-9]+[.]?[0-9]*"
fraction= "[.][0-9]+"
exponent= "([eEl" sign "[0-9]+)?"
number= nAn sign"(" decimal "I" fraction ")" exponent "$"
$0 ~ number' countries

其中,/ /" "在正则中等价,如:

$0 - /(,+l-)[0-9]+/
$0 - "(,\+l-)[0-9]+"
3.4 内置字符函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5 控制流

在这里插入图片描述

3.6 输出函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mengjizhiyou/article/details/127436328