Awk之if ,else if,else用法

awk 功能强大,可以处理文本,筛选需要的信息,这里不再多说,有兴趣的可以上网搜,我在这里只讲awk 怎样使用if else。
在网上查了好久,在shell使用awk 的 if else if else 时,网上给的列子是这样的:

awk '{if ($1==1) print "A" else if ($1==2) print "B" else print "C"}'

尝试了好久也不对,找不到哪儿的错误,后来听大神讲到,每个语句后面都有分号,正确的应该是这样的

awk '{if ($1==1) print "A"; else if ($1==2) print "B"; else print "C"}'

拓展:

awk中也支持++或者+=运算符

grep '接口耗时:' test.log|cut -d "m" -f 1 |cut -d ":" -f 2|awk 'BEGIN {count=ms1=ms2=ms3=0}{if($1<1) ms1++;else if($1>=1&&$1<=5) ms2++;else ms3++;count++}END{print "ms1,ms1占 比 ",ms1,",",ms1/count*100,"%";print "ms2,ms2占比",ms2,",",ms2/count*100,"%";print "ms3,ms3占比",ms3,",",ms3/count*100,"%"}'

上述命令输出的结果为:

xxx@xxxdeMacBook-Pro-142 ~ % grep '接口耗时:' test.log|cut -d "m" -f 1 |cut -d ":" -f 2|awk 'BEGIN {count=0;ms1=0;ms2=0;ms3=0}{if($1<1) ms1++;else if($1>=1&&$1<=5) ms2++;else ms3++;count++}END{print "ms1,ms1 占比",ms1,",",ms1/count*100,"%";print "ms2,ms2占比",ms2,",",ms2/count*100,"%";print "ms3,ms3占比",ms3,",",ms3/count*100,"%"}'
ms1,ms1占比 0 , 0 %
ms2,ms2占比 17 , 89.4737 %
ms3,ms3占比 2 , 10.5263 %

 存在的问题是输出的百分比带了4位小数,怎么样保留2位小数呢?

解决办法是可以使用printf格式化输出

修改后输出结果如下:

xxx@xxxdeMacBook-Pro-142 ~ % grep '接口耗时:' test.log|cut -d "m" -f 1 |cut -d ":" -f 2|awk 'BEGIN {count=ms1=ms2=ms3=0}{if($1<1) ms1++;else if($1>=1&&$1<=5) ms2++;else ms3++;count++}END{printf ("ms1,ms1占比 %s,%.2f",ms1,ms1/count*100,"%");printf ("ms2,ms2占比 %s,%.2f",ms2,ms2/count*100,"%");printf ("ms3,ms3占比 %s,%.2f",ms3,ms3/count*100,"%")}'
ms1,ms1占比 0,0.00ms2,ms2占比 17,89.47ms3,ms3占比 2,10.53%

可以看到虽然百分比是保留到2位小数了,但是每个统计结果没有换行显示

解决办法是加换行符\n,输出结果如下:

xxx@xxxdeMacBook-Pro-142 ~ % grep '接口耗时:' test.log|cut -d "m" -f 1 |cut -d ":" -f 2|awk 'BEGIN {count=ms1=ms2=ms3=0}{if($1<1) ms1++;else if($1>=1&&$1<=5) ms2++;else ms3++;count++}END{printf ("ms1,ms1占比 %s,%.2f\n",ms1,ms1/count*100);printf ("ms2,ms2占比 %s,%.2f\n",ms2,ms2/count*100);printf ("ms3,ms3占比 %s,%.2f",ms3,ms3/count*100)}'
ms1,ms1占比 0,0.00
ms2,ms2占比 17,89.47
ms3,ms3占比 2,10.53

又出现了新问题就是最后的百分比没有带%

查询资料得知printf函数格式化支持一下格式,所以要打印%应该使用两个%%

%的转换说明及作为结果的打印输出
%a                浮点数、十六进制数字和p-记数法(C99)
%A    浮点数、十六进制数字和p-记法(C99)
%c    一个字符 
%d    有符号十进制整数 
%e    浮点数、e-记数法
%E    浮点数、E-记数法
%f    浮点数、十进制记数法  
%g    根据数值不同自动选择%f或%e.
%G    根据数值不同自动选择%f或%e.
%i               有符号十进制数(与%d相同)
%o    无符号八进制整数
%p    指针    
%s    字符串
%u    无符号十进制整数
%x    使用十六进制数字0f的无符号十六进制整数 
%X    使用十六进制数字0f的无符号十六进制整数
%%    打印一个百分号

于是修改脚本为:

xxx@xxxdeMacBook-Pro-142 ~ % grep '接口耗时:' test.log|cut -d "m" -f 1 |cut -d ":" -f 2|awk 'BEGIN {count=ms1=ms2=ms3=0}{if($1<1) ms1++;else if($1>=1&&$1<=5) ms2++;else ms3++;count++}END{printf ("ms1,ms1占比 %s,%.2f%%\n",ms1,ms1/count*100);printf ("ms2,ms2占比 %s,%.2f%%\n",ms2,ms2/count*100);printf ("ms3,ms3占比 %s,%.2f",ms3,ms3/count*100,"%")}'

输出结果如下:

 至此问题解决。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
awk中,if else语句用于根据条件执行不同的操作。可以使用if else语句来实现条件判断和流程控制。下面是一些使用awk中的if else语句的方法: 方法1:使用awk的if else语句进行条件判断和执行操作。 ```awk if (条件1) { 执行操作1 } else if (条件2) { 执行操作2 } else { 执行操作3 } ``` 在这个示例中,如果条件1为真,则执行操作1。如果条件1为假且条件2为真,则执行操作2。如果所有条件都为假,则执行操作3。 方法2:另一种使用awk中的if else语句的方法是使用嵌套的if else语句。这样可以在一个if else语句中嵌套另一个if else语句。 ```awk if (条件1) { if (条件2) { 执行操作1 } else { 执行操作2 } } else { 执行操作3 } ``` 在这个示例中,如果条件1为真,则继续判断条件2。如果条件2为真,则执行操作1。如果条件2为假,则执行操作2。如果条件1为假,则执行操作3。 以上是awk中使用if else语句的一些方法,这些方法可以根据条件执行不同的操作,实现流程控制和条件判断。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Awk If,If Else,Else语句或条件语句](https://blog.csdn.net/cunjiu9486/article/details/109075566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕城南风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值