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 小传 - while(1) { } - SegmentFault 思否
- awk 手册 · bones7456 整理
参考资料
- ↑ 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