Awk 参考手册

本节提供 Awk 编程的速查手册,适用于快速查找 Awk 的语法、变量、操作符、函数等信息。


1. 运行 Awk

awk [-F<分隔符>] '{程序}' | {-f <程序文件>} [变量初始化] [-|数据文件]
  • -F<分隔符>:设置字段分隔符
  • {程序}:Awk 命令行程序
  • -f <程序文件>:从文件加载 Awk 脚本
  • [变量初始化]:初始化变量
  • [数据文件]:输入数据文件

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 编程的完整速查手册! 🚀

最后修改: 2025年01月30日 星期四 01:39