Linux中awk命令

Linux 中 awk 的用法详解

awk 是 Linux 下强大的文本处理工具,擅长对结构化文本(如日志、CSV 等)进行模式扫描和处理。其核心逻辑是 逐行扫描文件 → 按条件匹配 → 执行操作。以下是关键用法:

1. 基本结构
awk '模式 {动作}' 文件名

  • 模式:条件表达式(可省略,表示处理所有行)
  • 动作:对匹配行执行的操作(可省略,默认打印整行)
2. 字段操作
  • 默认分隔符:空格/制表符
  • 字段引用
    • $0:整行
    • $1:第 1 列
    • $NF:最后一列
    • $(NF-1):倒数第 2 列

示例:打印第 1 列和第 3 列

awk '{print $1, $3}' data.txt

3. 设置分隔符
  • 输入分隔符 -F
    awk -F',' '{print $2}' data.csv  # 按逗号分隔
    

  • 输出分隔符 OFS
    awk 'BEGIN{OFS=";"} {print $1,$3}' data.txt  # 输出用分号分隔
    

4. 特殊模式
  • BEGIN:处理前执行
  • END:处理后执行
awk 'BEGIN{sum=0} {sum+=$1} END{print "总和:" sum}' nums.txt

5. 条件过滤
  • 数值比较
    awk '$3 > 100 {print $0}' sales.txt  # 第 3 列大于 100 的行
    

  • 正则匹配
    awk '/error/ {print $2}' log.txt     # 包含 "error" 的行
    awk '$1 ~ /^2023/ {print}' data.log  # 第 1 列以 2023 开头
    

6. 内置变量
变量说明示例
NR当前行号awk 'NR==5' file
NF当前行列数awk '{print NF}' file
FS输入字段分隔符BEGIN{FS=":"}
RS输入行分隔符BEGIN{RS="\n\n"}
7. 数学运算

支持 + - * / % ^ 等运算:

awk '{avg=($2+$3)/2; print $1, avg}' scores.txt

8. 流程控制

支持 ifforwhile

awk '{if($2>50) print $1 "合格"; else print "不合格"}' results.txt

9. 数组操作

统计列值频次

awk '{count[$1]++} END{for(item in count) print item, count[item]}' access.log

10. 常用组合示例
  • 提取特定行
    awk 'NR>=10 && NR<=20' file.txt  # 10~20 行
    

  • 求和计算
    awk '{sum+=$4} END{printf "总计: %.2f\n", sum}' finance.dat
    

  • 字段重组
    awk -F':' '{print $3 ":" $1}' /etc/passwd  # 交换 UID 和用户名
    

总结流程图

graph LR
A[读取文件] --> B{模式匹配?}
B -- 是 --> C[执行动作]
B -- 否 --> A
C --> D[输出结果]
D --> A

掌握这些技巧可高效处理日志分析、数据清洗等任务。建议通过 man awk 查看完整文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值