awk用法之:文本替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk用法之:文本替换相关的知识,希望对你有一定的参考价值。

参考技术A awk用法之:文本替换

awk的sub/gsub函数用来替换字符串,其语法格式是:

注意第三个参数target,如果忽略则使用$0作为参数,即整行文本。

只把每行的第一个AAAA替换为BBBB

把每一行的所有AAAA替换为BBBB

只在出现字符串CCCC的前提下,将行中所有AAAA替换为BBBB

不管是AAAA,还是CCCC,全部替换为BBBB

全字匹配AAAA;即不匹配AAA,以及AAAAA,也就是说完整的四个字符串AAAA。

把所有以A开头,不管后面连续包含几个A的串替换成一个字符B。

性能测试日志分析之awk基础用法

转发自:微信公众号“测试那点事儿 ”的文章

我们做性能测试的时候要进行一些日志分析,最简单的可以用awk命令进行分析。

awk

awk是一个很好用的文本处理工具,相对于sed常用用作一整行的处理,awk则比较擅长将一行分成数个字段来处理。而在我们性能测试中,可以awk可以帮助我们造数,也可以帮助我们分析日志。

简单来说,awk就是用一个循环实现的。首先awk读取文本的一行(默认是从第一行开始,当然也可以根据条件选择行),然后根据你给的条件来处理这行的某个字段;处理完成后,再读取下一行,然后再根据条件去处理字段,直到处理完成所有的行。

 

awk的标准格式

awk ‘条件类型1{动作1} 条件类型2{动作2}.......‘

 

awk常用的内置变量

 

       NR:现在处理的是第几行数据

       NF:每行一共的字段数

       $0:代表一整行数据

       $1:代表第一个字段,以此类推

       RS 输入行分隔符(默认为回车)

       ORS 输出行分隔符(默认为回车)

       FS 字段分隔符(默认为空格)

       -F  指定多个字段分隔符并且支持正则表达式(比FS更加强大一些)

       OFS 输出字段分隔符(默认为空格)

 

格式化输出

 

print函数

特性

  1. 参数可以是变量、计算值、或字符串常量

  2. 字符串必须用双引号括起来

  3. 参数之间用逗号分隔(输出分隔符由变量OFS决定)

  4. 输出可以被重定向

  5. 输出和输入之间可以通过管道

 

printf函数

特性

  1. 返回给标准输出一个带有格式的字符串

  2. 不会在行尾自动换行

  3. 包含一个加引号的字符串

     

修饰符

  1. “-” 左对齐  

  2. #         八进制加0 十六进制加0x

  3. +         加上正负号+或-

  4. 0         用0填充空白符

  5.  

条件语句

 

格式:{if{(expression){

                   statement; statement;….

                   }

         else if(expression){

                   statement; statement;….

                   }

         else{ statement; statement;….

                   }

         }

可以使用条件,对字段进行处理

 

实战演练
例1

如下文本我只想要第一列和第三列然后重定向到test001.txt中

 

技术分享

awk ‘{print $1,$3}‘ example.txt >test001.txt

 

技术分享

 

2

如果字段的分隔符不是空格,那么我们需要先提前指定分隔符,使用-F或者FS,以passwd文件为例,每个字段是以冒号分隔的,我们想取出第二个字段,和第七个字段

 

技术分享

awk -F‘:‘ ‘{print $2,$7}‘ /etc/passwd

 

技术分享

 

3

默认出输出字段分隔符是空格,如果想改变默认输出分隔符呢,比如改成|

文本test001,原来的内容

 

技术分享

awk ‘{OFS="|"}{print $1,$2}‘ test001.txt

 

技术分享

 

4

默认输出行分隔符是回车,如果想把分隔符改成|呢,

文本test001,原来的内容,默认行分隔符为回车

 

技术分享

 

 

5

如果要处理的文本,默认不是以回车作为行的分隔符,我们希望处理之后,以回车作为空格符

要处理的文本,以”_”作为行的分隔符,我们想以回车为分隔符

 

技术分享

awk ‘BEGIN{RS="_"}{print $0}‘ test003.txt

 

技术分享

 

6

业务要求,一个播种墙号,对应一个波次号,播种墙号不能重复。文件中已有波次号(第二列),是重复的,但是每个号重复的数量不确定;需要自己添加播种墙号,播种墙号是连续的

 

技术分享

思路:使用awk进行处理,先读取第一行的播次号,把他赋值给一个变量,然后拿每行的波次号和这个变量相比较,如果相等,则播种墙号不变,如果不等,则播种墙号+1

 

由于语句较长,因此,写成shell脚本

技术分享

 

#$1的值赋值给qiang这个变量(这里的$1、$2指的是shell的参数,不是awk里面的)

#$2的值赋值给boci这个变量

#进行判断,如果$2(即文件里波次号)的值等于变量boci的值,那么输出原始文件整行和播种墙号

#如果$2(即文件里波次号)的值不等于变量boci的值,播种墙号+1,然后输出输出原始文件整行和播种墙号

 

awk ‘条件类型1{动作1} 条件类型2{动作2}.......‘





以上是关于awk用法之:文本替换的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sed 或 awk 正确查找和替换多行文本?

Linux文本处理三剑客grepsedawk用法详解

linux学习:sed与awk与tr用法整理

使用 sed/perl/awk 替换第一次出现的匹配文本

linux之文本内容替换命令sed

文本处理工具之---sed