awk
跳转到导航
跳转到搜索
命令行选项
-f
- 指定脚本文件
-F
- 指定记录分隔符
-v
- 定义变量,后接
var=value
形式
语法
指令
函数
标准内建函数
整数
int(x)
- 取整
字符串
length(str)
- 取字符串长度
printf(fmt, arg, ...)
- 格式化输出。结尾不自动添加换行符
sub(egexp, replacement [, target])
- 通过正则替换修改变量值。
target
默认为$0
。 substr(string, start [, length])
- 从
start
(从 1 开始)处截取长度为length
(默认到末尾)的字符串
系统
system(cmd)
- 执行外部命令,如
system("ls")
自定义函数
function ceiling(x) {
return (x == int(x)) ? x : int(x)+1;
}
特殊的变量
RS
与ORS
是记录分隔符,可以是正则表达式。RT
是RS
所匹配的部分。当RS
为空时,以一或多个空行作为分割符。
FS
与OFS
是域分隔符。RS
为空时,使用空串作为域分隔符(每个字符作为一个域)。
NR
- 当前记录序号
NF
- 当前记录的域数
FILENAME
- 文件名
FNR
- 当前文件内的记录序号
输入/输出
原地修改文件
这是一个 GNU 扩展,仅适用于 gawk。
使用-i inplace
载入相关脚本即可:[4]
gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
正则表达式
示例
词频统计
BEGIN {
FS="[^a-zA-Z]+"
}
{
for (i=1; i<=NF; i++)
words[tolower($i)]++
}
END {
for (i in words)
print i, words[i]
}
检查 shebang
awk 'FNR == 1 && /python -/ {print FILENAME;} FNR == 2 {nextfile;}' *(.R)
使用外部命令给 HTTP 日志添加地理位置信息
tip
是获取 IP 地理位置信息的外部命令。
awk '{"tip "$1 | getline i; $1 = $1" ("i")"; print}' access.log > new_access.log
参见
外部链接
- Awk学习笔记已失效,存档
- Chapter 11 The awk Programming Language(函数列表中有不同实现的区分)
- AWK 简明教程 | 酷壳 - CoolShell.cn
- Awk by example, Part 1
- 译言网 | AWK之父访谈录
- 为什么你应该学点Awk(附指南及示范)
- awk 小传 - while(1) { } - SegmentFault 思否
参考资料
- ↑ AWK Language Programming - Control Statements in Actions
- ↑ http://invisible-island.net/mawk/manpage/mawk.txt
- ↑ AWK Language Programming - Built-in Functions
- ↑ The GNU Awk User's Guide 16.7.4 Enabling In-Place File Editing
- ↑ AWK Language Programming - Regular Expressions
- ↑ AWK - Wikipedia, the free encyclopedia