好问题,阿杰 👍
我来给你写一份 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}'