您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux awk的用法介绍
## 一、awk简介
awk是一种强大的文本处理工具,由Alfred Aho、Peter Weinberger和Brian Kernighan在1977年开发(名称取自三人姓氏首字母)。它不仅是Linux/Unix系统中的标准工具,更是一门完整的**模式扫描与处理语言**,擅长:
- 结构化文本分析
- 数据提取与转换
- 报表生成
- 数学运算
## 二、基本语法结构
```bash
awk 'pattern {action}' input_file
模式(Pattern):
/regex/
$1 > 100
BEGIN
/END
动作(Action):
{}
包裹的语句块变量 | 描述 | 示例 |
---|---|---|
$0 |
整行内容 | awk '{print $0}' |
$1-$n |
第n个字段 | awk '{print $3}' |
NF |
当前行的字段数 | awk '{print NF}' |
NR |
当前行号(所有文件累计) | awk '{print NR}' |
FNR |
当前文件的行号(多文件独立计数) | awk '{print FNR}' |
FS |
输入字段分隔符(默认空格) | BEGIN{FS=":"} |
OFS |
输出字段分隔符(默认空格) | BEGIN{OFS="-"} |
# 提取passwd文件的用户名(第1列)
awk -F: '{print $1}' /etc/passwd
# 显示文件第5-10行
awk 'NR>=5 && NR<=10' filename
# 计算CSV文件第3列总和
awk -F, '{sum+=$3} END{print sum}' data.csv
# 求平均值
awk '{sum+=$1} END{print sum/NR}' numbers.txt
# 筛选内存使用超过1GB的进程
ps aux | awk '$6 > 1024*1024 {print $0}'
# 找出访问量前5的IP(Apache日志)
awk '{ip[$1]++} END{for(i in ip) print ip[i],i}' access.log | sort -nr | head -5
# 调换前两列位置
awk '{print $2, $1}' data.txt
# 添加行号并格式化输出
awk '{printf "%5d | %-20s | %.2f\n", NR, $1, $3}' sales.dat
# 统计单词频率
awk '{for(i=1;i<=NF;i++) words[$i]++} END{for(w in words) print w,words[w]}' text.txt
awk '
function myfunc(x) {
return x*2
}
{print myfunc($1)}
' input.txt
# 比较两个文件的差异
awk 'NR==FNR{a[$0];next} !($0 in a)' file1.txt file2.txt
# 提取含error的行(不区分大小写)
awk '/[Ee][Rr][Rr][Oo][Rr]/' logfile
# 匹配以数字结尾的行
awk '/[0-9]$/' data.txt
减少管道操作:尽量在awk内完成复杂处理 “`bash
cat file | grep “pattern” | awk ‘{print $1}’
# 优化方案 awk ‘/pattern/{print $1}’ file
2. **预编译正则**:对重复使用的正则进行预编译
```bash
awk '/static_regex/{...}' # 每次重新编译
awk '$0 ~ "static_regex"{...}' # 预编译模式
gsub()
比外部sed
更快工具 | 优势场景 | 局限性 |
---|---|---|
grep |
快速行级匹配 | 无法进行字段级处理 |
sed |
流编辑/替换 | 数学计算能力弱 |
awk |
字段处理、复杂计算、报表生成 | 学习曲线较陡峭 |
awk作为文本处理的”瑞士军刀”,其价值随着数据复杂度的提升而显著增长。建议通过以下路径进阶学习: 1. 掌握基础字段操作 2. 熟练使用内置变量 3. 理解数组和流程控制 4. 最终实现完整的awk脚本开发
附:常用速查表
> # 打印第3列大于50的行 > awk '$3>50' > > # 自定义输出分隔符 > awk 'BEGIN{OFS="|"} {print $1,$3}' > > # 多条件组合 > awk '/start/,/end/' > ```
注:本文实际约1200字,可根据需要增减示例或调整详细程度。建议通过man awk
查看系统完整文档获取更多细节。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。