AWK是GUN/Linux下的其中一个文本处理工具,简洁又强大。
程序结构
初始化
|
|
可选,awk程序启动时执行一次。
循环块
|
|
pattern
为正则表达式
END
|
|
可选,结束时执行一次。
示例
|
|
辅助选项
加载脚本文件
-f ???
或 --file=???
预先分配变量
-v var=???
或 --assign=var=???
预先指定分隔符
-F ???
或 --field-separator=???
指定多个分隔符: -F '[:,./]'
简单实例
打印指定列
打印第3、4列
打印模式匹配行
含a
的所有行,正则表达式语法和bash一样。
正则表达式语法:
打印匹配行指定列
含a
的所有行里,打印第3,4列。
打印符合条件行
长度大于18
不止打印
统计含a
的行数
内置变量
FILENAME
当前文件名
在BEGIN
块未定义
FS OFS
域分隔符:读取输入时分割
输出域分隔符:输出时分割
RS ORS
行分隔符
输出行分隔符
NF
number of field,当前行总域数
只打印一次:
NR
number of input records,当前行数
总行数:
运算
算数运算
|
|
逻辑运算
|
|
|
|
字符串拼接
|
|
模式匹配符
匹配:
不匹配:
控制语句
if-elseif-else
,while
,for
,do-while
等,和C语言类似。for (i in array)
用于遍历数组。
内置函数
length(str)
字符串长度
rand()
返回[0, 1)之间的随机数
gsub(regex, sub, str=$0)
全局替换
sub(regex, sub, str=$0)
替换
index(str, sub)
子串首次匹配位置,从1开始计数,匹配不到返回0。
match(str, regex)
和index
类似,但是匹配正则表达式。
substr(str, start, length)
按位置和长度截取字符串。