Linux基础命令awk

一、基础选项

​1. 指定字段分隔符
选项 功能说明 示例与场景 来源
​**-F fs** 设置输入字段分隔符(fs 可为字符串或正则表达式) awk -F: ‘{print $1}’ /etc/passwd 按冒号分隔 /etc/passwd 文件
​2. 定义用户变量
选项 功能说明 示例与场景 来源
​**-v var=value** 在脚本执行前定义变量 awk -v name=“Alice” ‘{print name,$0}’ data.txt 传递变量到脚本
​3. 读取脚本文件
选项 功能说明 示例与场景 来源
​**-f scriptfile** 从指定文件中读取 awk 脚本 awk -f process.awk input.txt 执行脚本文件

二、高级选项

​1. 兼容模式与调试
选项 功能说明 示例与场景 来源
​**-W compact** 启用紧凑模式(忽略扩展功能,兼容传统 awk) awk -W compact ‘{print $1}’ file
​**-W traditional** 启用传统模式(完全兼容 Bell 实验室版 awk) awk -W traditional ‘{print $1}’ file
​**-W lint** 检查代码兼容性问题 awk -W lint ‘{print $1}’ file
​2. 内置变量与处理控制
选项 功能说明 示例与场景 来源
​**-v 多变量赋值** 同时定义多个变量 awk -v a=10 -v b=20 ‘{print a+b}’ data.txt
BEGIN/END 块 在处理前/后执行代码块 awk ‘BEGIN{FS=“,”} {print $1}’ data.csv 设置分隔符并打印第一列
​3. 输入输出控制
选项 功能说明 示例与场景 来源
​**-v RS=“”** 将空行作为记录分隔符 awk -v RS=“” ‘{print $1,$2}’ data.txt 处理多行记录
​**-v ORS=“\t”** 设置输出记录分隔符为制表符 awk ‘{print $1,$2}’ OFS=“\t” data.txt 输出以制表符分隔
​**-v OFS=“\n”** 设置输出字段分隔符为换行符 awk ‘{print $1,$2}’ OFS=“\n” data.txt 每字段占一行

三、特殊功能选项

​1. 正则表达式与模式匹配
选项 功能说明 示例与场景 来源
​**~ / !~** 匹配/不匹配正则表达式 awk ‘$3 ~ /^202[3-4]/ {print}’ log.txt 匹配第三列以 2023/2024 开头的行
NR / NF 当前行号/字段数,用于条件判断 awk ‘NR>=3 && NR<=5 {print}’ file.txt 打印第3-5行
​2. 处理多文件与管道输入
选项 功能说明 示例与场景 来源
​管道输入 command awk '{print $1}'将前一个命令的输出作为awk 输入
​多文件处理 awk ‘{print $1}’ file1 file2 同时处理多个文件

四、典型操作示例

​1. 基础字段提取
bash

按逗号分隔并打印第一、三列

awk -F, ‘{print $1,$3}’ data.csv
引用来源:

​2. 条件过滤与统计
bash

统计第三列大于 50 的行数

awk ‘$3>50 {count++} END {print count}’ data.txt
引用来源:

​3. 格式化输出
bash

左对齐,宽度为 10 的字符串

awk ‘{printf “%-10s\n”, $1}’ data.txt
引用来源:

五、注意事项

​权限问题
处理系统文件(如 /etc/passwd)需 root 权限或使用 sudo。
​正则表达式转义
% 在 awk 中有特殊含义,需转义:awk ‘$3 ~ /202%/ {print}’。
​脚本调试
使用 -v 选项调试变量:awk -v debug=1 ‘{print debug,$0}’。
​性能优化
避免在循环内频繁修改 FS 或 OFS,建议在 BEGIN 块中初始化。

六、完整选项速查表

选项分类 选项列表 来源
​基础操作 -F, -v, -f
​高级功能 -W compact, -W traditional, -v RS=“”
​输入输出 -v OFS=“\t”, -v ORS=“\n”
​模式匹配 ~, !~, NR, NF
引用来源:

基础选项与示例:
高级选项与调试:
输入输出控制:
正则表达式与模式匹配:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值