程序模型
pattern { action }
变量
两种变量
- scalar
- array
变量名
- 内建变量大写
- 全局变量首字母大写
- 局部变量小写
数组
- 允许任意数字或字符串做索引
内建变量
变量 | 说明 |
---|---|
FILENAME | input file name |
FNR | 文件的record数 |
FS | field分隔符 |
RS | record分隔符 |
NF | field数 |
NR | job中的record数 |
ENVIRON | 用于访问环境变量 |
字符串
两个连续的字符串会自动连在一起
# equivalent
C = "ABC"
C = "AB" "C"
C = "A" "B" "C"
正则表达式的两种表示
- 引号:
"^[A-Z]+$"
- 斜杠:
/^[A-Z]+$/
field
字段分隔符
- 默认为单一空格,它接受特殊的解释方式:一个或多个空白字符(空格与制表符)以及一行开头和结尾的空白被忽略。如果显示设置空格分隔符,如:
FS="[ ]"
,则多余空白不会被忽略。
字段
$0
当前字段$1, ..., $NF
每个字段
pattern
- 由字符串与
/
或数值表达式构成 BEGIN
操作里FILENAME
,FNR
,NR
,NF
都是未定义的
模式表达式 | 执行操作 |
---|---|
NF==0 | 选定空record |
NF>3 | 包含3个field以上的record |
NR<5 | 第1到4条record |
$1 ~ /abc/ | 第1个field包含abc |
结构化
if (expression1)
statement1
else if (expression2)
statement2
else
statement3
循环
# while
while (expression)
statement
# do ... while
do
statement
while (statement)
# range loop
for (exp1; exp2; exp3)
statement
# key loop
for (key in array)
statement