Awk入门
Completion requirements
Awk 参考手册
本节提供 Awk 编程的速查手册,适用于快速查找 Awk 的语法、变量、操作符、函数等信息。
1. 运行 Awk
awk [-F<分隔符>] '{程序}' | {-f <程序文件>} [变量初始化] [-|数据文件]
2. Awk 程序的一般格式
BEGIN {<初始化>}
<搜索模式 1> {<操作>}
<搜索模式 2> {<操作>}
...
END {<最终操作>}
3. 搜索模式
3.1 正则表达式匹配
/<字符串>/ # 查找包含 "字符串" 的行
/^<字符串>/ # 查找以 "字符串" 开头的行
/<字符串>$/ # 查找以 "字符串" 结尾的行
3.2 限定字段匹配
$<字段号> ~ /<字符串>/ # 在指定字段搜索字符串
$<字段号> !~ /<字符串>/ # 搜索指定字段**不包含**字符串的行
3.3 逻辑运算
/(apple)|(banana)/ # 匹配 "apple" 或 "banana"
3.4 范围匹配
/<开始>/,/<结束>/ # 匹配从 "<开始>" 到 "<结束>" 之间的所有行
3.5 比较运算
NR == 10 # 选择第 10 行
$1 > 100 # 选择第一列大于 100 的行
$3 != "USA" # 选择第三列不等于 "USA" 的行
3.6 逻辑运算符
&& # 逻辑 AND
|| # 逻辑 OR
3.7 元字符匹配
[abc] # 匹配 "a"、"b" 或 "c"
[^abc] # 匹配**不包含** "a"、"b" 或 "c" 的字符
. # 匹配任意单个字符
* # 匹配 0 或多个前导字符
? # 匹配 0 或 1 次前导字符
+ # 匹配 1 次或更多前导字符
4. 特殊字符
字符 | 说明 |
---|---|
\n |
换行 |
\t |
水平制表符 |
\r |
回车 |
\f |
换页符 |
\\ |
反斜杠 \ |
5. 预定义变量
变量 | 说明 |
---|---|
$0 |
当前行的全部内容 |
$1,$2,... |
各字段内容 |
NR |
当前记录(行)号 |
NF |
当前行的字段数 |
FILENAME |
当前输入文件名 |
FS |
字段分隔符(默认:空格) |
RS |
记录分隔符(默认:换行 \n ) |
OFS |
输出字段分隔符(默认:空格) |
ORS |
输出记录分隔符(默认:换行 \n ) |
6. 算术运算
+ # 加法
- # 减法
* # 乘法
/ # 除法
% # 取余
++ # 自增
-- # 自减
6.1 复合赋值
x += 2 # 等价于 x = x + 2
x -= 2 # 等价于 x = x - 2
x *= 2 # 等价于 x = x * 2
x /= 2 # 等价于 x = x / 2
x %= 2 # 等价于 x = x % 2
7. 字符串操作
7.1 连接字符串
str = "Hello" "World" # "HelloWorld"
7.2 字符串函数
length(s) # 返回字符串 s 的长度
substr(s, m, n) # 获取 s 中从 m 开始的 n 个字符
split(s, arr, sep) # 按 sep 分割 s,存入数组 arr
index(target, search) # 返回 search 在 target 中的索引位置
sprintf("%d-%s", 10, "test") # 格式化字符串
8. 控制结构
8.1 条件判断
if (x > 10) print "x is large"
else print "x is small"
8.2 循环
while (x < 10) { print x; x++ }
for (i=1; i<=5; i++) print i
for (item in array) print item, array[item] # 遍历数组
8.3 无条件控制
break # 终止循环
continue # 跳过本次循环
next # 处理下一行数据
exit # 终止 Awk 程序
9. 输出
9.1 print 语句
print "Hello", "World" # 用 OFS 连接并输出(默认空格)
print "Hello" "World" # 直接拼接输出
9.2 printf 语句
printf("%s - %d\n", "Age", 30) # 格式化输出
格式符 | 说明 |
---|---|
%d |
十进制整数 |
%o |
八进制整数 |
%x |
十六进制整数 |
%c |
字符 |
%s |
字符串 |
%f |
浮点数 |
%e |
科学计数法 |
%g |
最短格式 |
10. 文件操作
10.1 输出重定向
print "Hello" > "file.txt" # 覆盖写入
print "World" >> "file.txt" # 追加写入
10.2 读取文件
while (getline < "file.txt") print
close("file.txt")
10.3 管道
print "Hello" | "tr a-z A-Z" # 传递数据到外部命令
11. 示例
11.1 计算文件的行数
awk 'END {print NR}' file.txt
11.2 计算某列的总和
awk '{sum += $2} END {print sum}' data.txt
11.3 查找包含 "error" 的行
awk '/error/' logfile.txt
11.4 替换字符串
awk '{gsub("old", "new"); print}' file.txt
11.5 统计不同单词出现次数
awk '{for (i=1; i<=NF; i++) count[$i]++} END {for (w in count) print w, count[w]}' file.txt
🚀 以上就是 Awk 编程的完整速查手册! 🚀
Last modified: Thursday, 30 January 2025, 1:39 AM