Linux - awk 命令
简介
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger和 Brian Kernighan 的Family Name 的首字符。主要用于数据扫描、过滤、统计汇总工作,数据可以来自标准输入、管道或者文件。
内建变量
变量 | 描述 |
---|---|
$n | 当前记录的第n个字段,第一列从$1开始,字段间由FS分隔 |
$0 | 完整的输入记录 |
FS | 字段分隔符(默认是任何空格) |
IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
log.txt文本内容如下:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
基本用法
用法1:
awk '{[pattern] action}' {filenames} #行匹配语句 awk '' 只能用单引号
实例:
#每行按空格或TAB分割,输出文本中的1、4项
awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
#格式化输出
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
用法2:
awk -F #-F相当于内置变量FS, 指定分割字符
实例:
#使用","分割
awk -F, '{print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
#或者使用内建变量
awk 'BEGIN{FS=","} {print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
#使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
awk -F '[ ,]' '{print $1,$2,$5}' log.txt
---------------------------------------------
2 this test
3 Are awk
This's a
10 There apple
用法3:
awk -v #设置变量
实例:
awk -va=1 '{print $1,$1+a}' log.txt
---------------------------------------------
2 3
3 4
This's 1
10 11
awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
用法4:
awk -f {awk脚本} {文件名}
实例:
awk -f cal.awk log.txt
其他用法:
实例:
1)过滤第一列大于2的行
awk '$1>2' log.txt
---------------------------------------------
3 Are you like awk This's a test 10 There are orange,apple,mongo
2)过滤第一列等于2的行的第一列和第三列
awk '$1==2 {print $1,$3}' log.txt
---------------------------------------------
2 is
3)过滤第一列大于2并且第二列等于'Are'的行
awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt
---------------------------------------------
3 Are you
4)输出第二列包含 "th",并打印第二列与第四列
awk '$2 ~ /th/ {print $2,$4}' log.txt
---------------------------------------------
this a
5)输出包含 "re" 的行
awk '/re/ ' log.txt
---------------------------------------------
3 Are you like awk
10 There are orange,apple,mongo
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」