好问题,阿杰 👍
我来给你写一份 Linux 下 awk 命令详解,带上常用实例,你学完能马上上手。
🐧 Linux awk
命令详解
1. awk
是什么?
awk
是 Linux/Unix 下非常强大的 文本处理工具- 特点:按行读取、按列处理
- 常用于日志分析、数据提取、格式化输出
语法:
awk 'pattern { action }' filename
pattern
:匹配条件(可省略,表示所有行)action
:对匹配行执行的操作(比如打印、运算)- 默认分隔符:空格或 Tab
2. 内置变量
awk
有很多内置变量,最常用的是 行和列相关的:
变量 | 含义 |
---|---|
$0 | 当前整行内容 |
$1 | 当前行第1列 |
$2 | 当前行第2列 |
NF | 当前行的列数 (Number of Fields) |
NR | 当前行号 (Number of Records) |
FNR | 各文件分别的行号 |
FS | 输入分隔符 (默认空格) |
OFS | 输出分隔符 (默认空格) |
RS | 输入的行分隔符 (默认换行) |
3. 常用用法示例
(1) 打印整行
awk '{print $0}' file.txt
(2) 打印指定列
awk '{print $1, $3}' file.txt
👉 输出第1列和第3列
(3) 打印行号 + 内容
awk '{print NR, $0}' file.txt
(4) 指定分隔符
假设 data.csv
内容如下:
id,name,age
1,阿杰,25
2,小李,30
按逗号分隔:
awk -F ',' '{print $1, $2}' data.csv
👉 输出:
id name
1 阿杰
2 小李
(5) 条件过滤
打印第二列等于 “阿杰” 的行:
awk -F ',' '$2=="阿杰" {print $0}' data.csv
(6) 数值比较
打印年龄大于 25 的人:
awk -F ',' '$3 > 25 {print $2, $3}' data.csv
(7) 内置函数
awk
也支持一些常见函数:
awk '{print toupper($1)}' file.txt # 转大写
awk '{print length($0)}' file.txt # 每行长度
(8) BEGIN / END 语句块
BEGIN
:在处理文件前执行END
:在处理文件后执行
awk 'BEGIN {print "处理开始"} {print $1} END {print "处理结束"}' file.txt
(9) 累加统计
统计第3列的总和:
awk '{sum += $3} END {print "总和:", sum}' data.txt
统计第3列的平均值:
awk '{sum += $3; count++} END {print "平均:", sum/count}' data.txt
4. 进阶用法
(1) 多条件匹配
awk '$2=="阿杰" && $3>20 {print $0}' data.csv
(2) 正则匹配
打印包含 “error” 的行:
awk '/error/ {print $0}' log.txt
5. 小结
- 打印:
awk '{print $1, $2}'
- 分隔符:
-F
- 变量:
NR
(行号),NF
(列数),$0/$n
(列) - 条件过滤:
awk '$3 > 10'
- 统计:
awk '{sum+=$2} END {print sum}'
发表回复