### gawk的一些正则用法 #### 知识点概览 本文将详细介绍shell脚本语言中的`gawk`工具在处理正则表达式时的一些实用技巧与应用场景。`gawk`是`awk`的一个扩展版本,它在标准`awk`的基础上增加了更多的功能,使其在文本处理方面更为强大。下面我们将逐一解析给定文件中提到的例子,帮助读者更好地理解和应用这些技巧。 #### 1. 使用gawk匹配字符串开头为`no`或`so`的行 ```bash gawk -F'`' '$1~/^(no|so)/' test ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `$1~/^(no|so)/`:使用正则表达式匹配第一列数据,判断其是否以`no`或`so`开头。 - **应用场景**: - 当需要筛选出以特定字符串开头的数据时,可以使用此方法。 #### 2. 匹配字符串开头为`n`或`s`的行,并打印第一列 ```bash gawk -F'`' '$1~/^[ns]/' {print $1} test ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `$1~/^[ns]/`:使用正则表达式匹配第一列数据,判断其是否以`n`或`s`开头。 - `{print $1}`:如果条件成立,则打印该行的第一列。 - **应用场景**: - 在日志分析中,经常需要根据字符串开头进行过滤。 #### 3. 打印以两个数字结尾的行 ```bash gawk -F'`' '$1~/[0-9][0-9]$/' ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `$1~/[0-9][0-9]$/`:使用正则表达式匹配第一列数据,判断其是否以两个数字结尾。 - **应用场景**: - 对于需要识别特定数字格式的数据筛选非常有用。 #### 4. 第一列为1或第二列小于5时打印行 ```bash gawk -F'`' '$1==1 || $2<5' test ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `$1==1 || $2<5`:使用逻辑运算符判断第一列是否等于1或者第二列是否小于5。 - **应用场景**: - 当需要根据数值大小进行过滤时,此方法非常有效。 #### 5. 排除第一列为10的行 ```bash gawk -F'`' '$1!=10' test ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `$1!=10`:判断第一列是否不等于10。 - **应用场景**: - 用于排除某些特定数值的记录。 #### 6. 如果一行包含`t`,则第一列增加10 ```bash gawk -F'`' '/t/{print $1+10}' test ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `/t/`:使用正则表达式匹配行内是否有`t`字符。 - `print $1+10`:如果存在`t`,则将第一列数据加10后打印。 - **应用场景**: - 对于需要根据文本内容执行数值操作的情况非常有用。 #### 7. 如果第三列大于10,打印“ok:”和第三列;否则打印“error:”和第三列 ```bash gawk -F'`' '{print ($3>10?"ok:"$3:"error:"$3)}' test ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `($3>10?"ok:"$3:"error:"$3)`:使用三元运算符判断第三列是否大于10,并据此输出不同的结果。 - **应用场景**: - 用于根据数值大小输出不同信息。 #### 8. 将第一列为`no`的替换为`test` ```bash gawk -F'`' '$1=="no"{$1="test";print}' test ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `$1=="no"{$1="test";print}`:判断第一列是否为`no`,如果是,则将其替换为`test`并打印整行。 - **应用场景**: - 字段值的替换在数据清洗过程中非常常见。 #### 9. 将第四列设置为第一列加上100,然后打印所有列 ```bash gawk -F'`' '{$4=100+$1;print}' test ``` - **解释**: - `-F'`'`:指定字段分隔符为`'`。 - `{$4=100+$1;print}`:将第四列设为第一列加上100,然后打印所有列。 - **应用场景**: - 新列的创建或数值计算在数据分析中很常见。 #### 10. 设置输入字段分隔符、输出字段分隔符和输出记录分隔符 ```bash gawk 'BEGIN{FS="`";OFS="\t";ORS="\n\n"}{print$1,$2,$3}' test ``` - **解释**: - `BEGIN{FS="`";OFS="\t";ORS="\n\n"}`:设置输入字段分隔符为`'`,输出字段分隔符为`\t`(制表符),输出记录分隔符为`\n\n`(两个换行符)。 - `{print$1,$2,$3}`:打印每一行的前三个字段。 - **应用场景**: - 当处理具有特殊格式的文件时,需要自定义分隔符来确保正确读取和输出数据。 #### 11. 统计文件中的记录数量 ```bash awk 'END{print "The number of records is " NR}' test ``` - **解释**: - `END{print "The number of records is " NR}`:在处理完所有行后,打印出“记录的数量是”加上变量`NR`的值。 - **应用场景**: - 统计文件中的记录数在数据分析和数据预处理阶段非常有用。 通过上述示例可以看出,`gawk`在处理文本文件时提供了强大的功能,能够满足各种复杂的文本处理需求。掌握这些技巧将极大地提高处理数据的能力,特别是在大规模数据处理和自动化任务中。




























1`3`5
no`3`7
so`8`10
45`fdd`33
ns`52`39
No`7`9
1.打印第一列以no或者so开头的行
gawk -F '`' '$1~/^(no|so)/' test
2.如果记录以n或s开头,就打印这个记录
gawk -F '`' '$1~/^[ns]/{print $1}' test
3.如果第一个域以两个数字结束就打印这个记录
gawk -F '`' '$1~/[0-9][0-9]$/{print $1}' test
4.如果第一个或等于1或者第二个域小于5,则打印该行
gawk -F '`' '$1==1 || $2 < 5' test
5.如果第一个域不等于10就打印该行
gawk -F '`' '$1 != 10' test
6.如果记录包含正则表达式t,则第一个域加10并打印出来
gawk -F '`' '/t/{print $1+10}' test
t可以是一个正则表达式 比如 ^1 以1开头的行 或者是 5$以五结尾的行
7.如果第一个域大于10则打印问号后面的表达式值,否则打印冒号后面的表达式值
gawk -F '`' '{print ($3>10?"ok:"$3:"error:"$3)}' test
8.如果第一个域的值是"no",则把它赋值给"test" 注意:字符串一定要用引号
gawk -F '`' '$1 == "no"{$1 = "test";print}' test
9.如果第二个域不存在,gawk将计算表达式100加$1的值,并将其赋值给$2,如果第二个域存在,则用表达式的值覆盖$2原来的值
gawk -F '`' '{$4 = 100 + $1;print}' test
10.在处理输入文件以前,域分隔符(FS)被设为`,输出文件分隔符(OFS)被设置为制表符,输出记录分隔符(ORS)被设置为两个 换行符
gawk 'BEGIN{FS="`";OFS="\t";ORS="\n\n"}{print $1,$2,$3}' test
11.如果第一个域的值等于1,则把它输出到ss.txt中

- hell0082013-12-13不错 只是有点小错误
- gonst20022012-10-10作者的经验之作,值得一看

- 粉丝: 28
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于MATLAB的数字通信系统仿真方案设计书.doc
- 大数据集群-hadoop的安全防护.docx
- 普通高中计算机信息安全实践教学研究.docx
- 计算机网络信息安全及对策.doc
- 简论信息化对社会经济的影响.docx
- 论大数据下企业财务会计向管理会计的转型.docx
- 中小型企业实施网络精准营销的方法研究-上下文推广.docx
- 虚拟化技术在计算机机房管理中的应用策略分析.docx
- 基于网络化的职业英语教学模式探索.docx
- 智能家居防盗报警系统设计方案-智建社区.docx
- PLC的花样喷泉控制系统设计方案PLC的花样喷泉控制.doc
- VB程序设计第四章-基本的控制结构.ppt
- SCLCD控制器控制TFT彩屏接口设计.ppt
- 单片机控制无刷直流电机驱动系统设计方案新.doc
- 实验室管理经验交流材料信息与通信工程科技专业资料.ppt
- 模糊层次分析法在计算机网络安全评价中的运用.doc


