linuxgawk命令详解
linuxgawk命令详解详细介绍
Linux
gawk 命令详解(GNU Awk)
1. 简介
gawk 是 GNU 版本的 awk,是一款强大的文本处理工具,主要用于模式扫描与文本转换。它通过读取输入(文件或标准输入),根据指定的模式(Pattern)匹配行,并对匹配的行执行动作(Action),支持变量、函数、流程控制等编程特性,广泛用于日志分析、数据提取、报表生成等场景。
2. 基本语法
bash
选项 输入文件脚本文件.awk 输入文件
3. 常用选项
| 选项 | 说明 |
|---|---|
-F, --field-separator FS |
指定字段分隔符(默认是空格或制表符),如 -F, 表示逗号分隔。 |
-v var=value |
定义用户变量,在脚本中直接使用。 |
-f file |
从文件中读取 gawk 脚本。 |
-i file |
加载库文件(GNU 扩展功能)。 |
-m[fr] val |
设置内存限制(GNU 扩展,如 -mfree 1024m)。 |
-O, --optimize |
优化脚本执行(GNU 扩展)。 |
-W, --help |
显示帮助信息。 |
4. 内置变量(预定义变量)
| 变量 | 说明 |
|---|---|
$0 |
当前处理的整行内容。 |
$1, $2, ..., $n |
第 1 个、第 2 个、… 第 n 个字段(字段由 FS 分隔)。 |
FS |
输入字段分隔符(默认是空格或制表符),可动态修改(如 FS=",")。 |
OFS |
输出字段分隔符(默认是空格),用于控制 print 输出的字段间隔。 |
NF |
当前行的字段总数(Number of Fields)。 |
NR |
已处理的行号(从 1 开始,针对所有输入文件)。 |
FNR |
当前文件中的行号(针对多文件输入时,每个文件独立计数)。 |
RS |
输入记录分隔符(默认是换行符 \n,即一行一条记录)。 |
ORS |
输出记录分隔符(默认是换行符 \n)。 |
ARGC |
命令行参数个数。 |
ARGV |
命令行参数数组(ARGV[0] 是程序名,ARGV[1] 起是输入文件等)。 |
5. 模式(Pattern)
模式用于筛选需要处理的行,常见类型:
5.1 空模式(默认匹配所有行)
bash
文件.txt
5.2 正则表达式匹配
~表示匹配,!~表示不匹配。bash日志.log数据.csv
5.3 条件表达式
bash
数据.txt文件.txt
5.4 行号范围
bash
文件.txt文件.txt
5.5 BEGIN/END 块
BEGIN:在处理所有输入行前执行一次(用于初始化)。END:在处理所有输入行后执行一次(用于汇总)。bash数据.csv
6. 动作(Action)
动作是对匹配行执行的操作,由一系列语句组成,用 {} 包裹。
6.1 基本操作
- 打印字段:
bash文件.txt数据.txt
- 修改字段分隔符:
bash/etc/passwd
6.2 变量与运算
- 用户变量:
bash文件.txt数据.txt
- 算术运算:
+、-、*、/、%(取余)、^(幂运算)。 - 逻辑运算:
&&(与)、||(或)、!(非)。 - 字符串拼接:直接用空格或
""连接,如str = "hello" "world"。
6.3 流程控制
- 条件语句(if-else):
bash成绩.txt - 循环(for/while/do-while):
bash文件.txt
6.4 数组(Associative Array)
- 用于存储键值对,键可以是字符串或数字。bash
数据.txt
6.5 函数
- 字符串函数:
函数 说明 length(str)返回字符串长度(默认处理 $0)。sub(re, repl[, str])替换字符串中第一个匹配的正则表达式 re为repl(默认处理$0)。gsub(re, repl[, str])替换字符串中所有匹配的正则表达式 re为repl。index(str, substr)返回子串 substr在str中的位置(从 1 开始,0 表示未找到)。split(str, arr[, fs])按分隔符 fs(默认空格)分割str到数组arr,返回字段数。bash
数据.txt日期.txt
- 数学函数:
sqrt(x)(平方根)、rand()(0-1 随机数)、int(x)(取整)、abs(x)(绝对值)等。 - 其他函数:
system("命令")(执行系统命令)、exit([n])(退出并返回状态码n)。
7. 实战示例
7.1 处理 CSV 文件
bash
-F, 成绩.csv
7.2 统计日志访问次数
bash
访问日志.log
7.3 替换文本
bash
文本文件.txt
文本文件.txt
7.4 生成报表
bash
成绩表.csv
8. 编写 gawk 脚本
将多个命令保存到文件(如 script.awk):
awk
FS
OFS
NR
total
total
执行脚本:
bash
+x script.awk./script.awk 数据.csv
9. 注意事项
- 字段分隔符:若字段包含空格,需用
-F显式指定分隔符(如制表符\t或正则表达式)。 - 正则表达式:使用
/正则表达式/时,特殊字符需转义(如\.表示点号)。 - 性能:处理大文件时,优先使用内置函数和简洁语法,避免不必要的循环。
- GNU 扩展:
gawk支持更多功能(如--re-interval匹配重复次数),但需注意与传统awk的兼容性。
10. 更多资源
- 官方文档:
man gawk或 GNU Awk 文档 - 在线练习:通过处理日志、CSV 等真实数据巩固用法。
通过灵活组合模式、动作和内置功能,gawk 能高效完成文本处理任务,是 Linux 系统管理和数据处理的必备工具之一。