"这篇资源主要介绍了awk命令在处理文本数据时的各种用法,包括匹配特定行、处理字段、条件判断以及自定义分隔符等。此外,还提到了awk内部预定义变量的作用,如ARGC、ARGV、FILENAME、FNR、FS、RS、NF、NR、OFS和ORS。" 在Linux或Unix环境中,awk是一种强大的文本分析工具,常用于处理和解析结构化数据。以下是关于awk用法和变量含义的详细解释: 1. **匹配行**: - `awk '/101/' file`:查找并打印文件`file`中包含字符串"101"的行。 - `awk '/101/,/105/' file`:从包含"101"的行开始,到包含"105"的行结束,打印所有行。 - `awk '$1 == 5' file`:如果第一字段(默认以空格分隔)是数字5,则打印该行。 - `awk '$1 == "CT"' file`:若第一字段为字符串"CT",则打印该行。注意字符串需用双引号括起来。 - `awk '$1 * $2 > 100' file`:如果第一字段乘以第二字段的结果大于100,打印该行。 - `awk '$2 > 5 && $2 <= 15' file`:当第二字段的值大于5且小于等于15时,打印该行。 2. **处理字段**: - `awk '{print NR, NF, $1, $NF}' file`:显示文件的当前记录号(NR)、域数(NF)以及每行的第一个($1)和最后一个($NF)域。 - `awk '/101/{print $1, $2+10}' file`:在匹配"101"的行中,打印第一字段,并将第二字段加10。 - `awk '/101/{print $1$2}' file`:将匹配行的第一和第二字段合并,不带分隔符。 3. **处理输入和输出分隔符**: - `df | awk '$4 > 1000000'`:通过管道符传递`df`命令的输出,显示第四字段大于1000000的行。 - `awk -F "|" '{print $1}' file`:设置分隔符为"|",打印每个以"|"分隔的字段的第一部分。 - `awk 'BEGIN{FS="[:\t|]"} {print $1,$2,$3}' file`:设置输入分隔符为冒号、制表符或竖线,打印前三个字段。 - `awk -F $Sep '{print $1}' file`:根据环境变量`Sep`的值作为分隔符。 - `awk -F '[:,\t|]' '{print $1}' file`:使用正则表达式定义分隔符,包括空格、冒号、制表符和竖线。 - `awk -F '[][]' '{print $1}' file`:以方括号"[ ]"作为分隔符。 4. **自定义脚本**: - `awk -f awkfile file`:通过指定的awk脚本文件`awkfile`来处理`file`。 - 例如,`awkfile`可以包含: ``` /101/{print "\047Hello!\047"} # 匹配到"101"时打印'Hello!' {print $1, $2} # 没有模式时,打印每一行的前两个字段 ``` 5. **其他内部变量**: - `ARGC`:命令行参数的数量,包括脚本文件名。 - `ARGV`:命令行参数的数组,包括文件名。 - `FILENAME`:当前正在处理的文件名。 - `FNR`:当前文件中的记录数,不同于全局的`NR`,只针对单个文件。 - `FS`:输入字段分隔符,可自定义。 - `RS`:输入记录分隔符,可自定义。 - `NF`:当前记录中的字段数量。 - `NR`:到目前为止处理的总记录数。 - `OFS`:输出字段分隔符,用于控制输出时字段间的间隔。 - `ORS`:输出记录分隔符,控制行之间的间隔。 通过灵活运用这些功能,awk可以高效地对文本数据进行筛选、处理和格式化,是Linux系统管理及数据分析中的得力助手。
变量名 含义
ARGC 命令行变元个数
ARGV 命令行变元数组
FILENAME 当前输入文件名
FNR 当前文件中的记录号
FS 输入域分隔符,默认为一个空格
RS 输入记录分隔符
NF 当前记录里域个数
NR 到目前为止记录数
OFS 输出域分隔符
ORS 输出记录分隔符
1、awk '/101/' file 显示文件file中包含101的匹配行。
awk '/101/,/105/' file
awk '$1 == 5' file
awk '$1 == "CT"' file 注意必须带双引号
awk '$1 * $2 >100 ' file
awk '$2 >5 && $2<=15' file
2、awk '{print NR,NF,$1,$NF,}' file 显示文件file的当前记录号、域数和每一行的第一个和最后一个域。
awk '/101/ {print $1,$2 + 10}' file 显示文件file的匹配行的第一、二个域加10。
awk '/101/ {print $1$2}' file
awk '/101/ {print $1 $2}' file 显示文件file的匹配行的第一、二个域,但显示时域中间没有分隔符。
3、df | awk '$4>1000000 ' 通过管道符获得输入,如:显示第4个域满足条件的行。
4、awk -F "|" '{print $1}' file 按照新的分隔符“|”进行操作。
awk 'BEGIN { FS="[: \t|]" }
{print $1,$2,$3}' file 通过设置输入分隔符(FS="[: \t|]")修改输入分隔符。
Sep="|"
awk -F $Sep '{print $1}' file 按照环境变量Sep的值做为分隔符。
awk -F '[ :\t|]' '{print $1}' file 按照正则表达式的值做为分隔符,这里代表空格、:、TAB、|同时做为分隔符。
awk -F '[][]' '{print $1}' file 按照正则表达式的值做为分隔符,这里代表[、]
5、awk -f awkfile file 通过文件awkfile的内容依次进行控制。
cat awkfile
/101/{print "\047 Hello! \047"} --遇到匹配行以后打印 ' Hello! '.\047代表单引号。
{print $1,$2} --因为没有模式控制,打印每一行的前两个域。
6、awk '$1 ~ /101/ {print $1}' file 显示文件中第一个域匹配101的行(记录)。
7、awk 'BEGIN { OFS="%"}
{print $1,$2}' file 通过设置输出分隔符(OFS="%")修改输出格式。
8、awk 'BEGIN { max=100 ;print "max=" max} BEGIN 表示在处理任意行之前进行的操作。
{max=($1 >max ?$1:max); print $1,"Now max is "max}' file 取得文件第一个域的最大值。
(表达式1?表达式2:表达式3 相当于:
if (表达式1)
表达式2
else
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦