`

awk中调用shell变量注意事项

阅读更多
awk中不能直接用$var来引用shell的变量,昨天写的shell脚本,有一列是不正确的,导致最后一列>50那处数据不正确,悲催的语法。有空再把质量统计数据加入到支撑平台吧。

#app avg quality
echo "app avg quality:"
awk -F , '$5==" app=blog"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}' $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=mblog"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}' $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=album"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}' $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=video"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}' $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=profile"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}' $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=guestbook"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}'  $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=discuss"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}'  $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=request"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}'  $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=setting"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}'  $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'
awk -F , '$5==" app=scomment"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500") {print$3}'  $currentFilePath|awk -F = '{sum+=$2;j++};END{print sum/(j+1)}'

#app network quality >50
echo "app network quality >$normal"
awk -F , '{if($5==" app=blog"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=mblog"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=album"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=video"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=profile"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=guestbook"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=discuss"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=request"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=setting"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath
awk -F , '{if($5==" app=scomment"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>$(normal)){j++}};END{print j+0}' $currentFilePath ;

#上面的$(normal)是不正确的,会导致数据计算出错。

awk在调用shell变量时,需要使用参数-v,修改后:

awk -v normal=$normal -F , '{if($5==" app=scomment"&&($7==" resultCode=200"||$7==" resultCode=404"||$7==" resultCode=500")&&substr($3,12)+0>normal){j++}};END{print j+0}' $currentFilePath ;

其中$normal、为shell中变量,可以看出,每调用一次变量都要加一个-v参数,后面使用shell变量的时候,就不用加$了,直接用normal就好了。

其中$currentFilePath不在awk语句中,所以不受影响。

ps:sed一般使用单引号,sed引用shell变量时使用双引号即可,因为双引号是弱转义,不会去除$的变量表示功能,而单引号为强转义,会把$作为一般符号表示,所以不会表示为变量。

分享到:
评论

相关推荐

    shell 编程指南pdf

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    LINUX与UNIX SHELL编程指南(很全)

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    LINUX与UNIX SHELL编程指南 高清PDF

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    Linux与unix shell编程指南

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    新版Linux Shell编程实训(全)20170518.docx

    项目二 Shell变量 67 [学习目标] 67 任务2.1 Linux环境变量 68 2.1.1 查看环境变量 69 任务2.2 Shell变量 70 2.2.1 定义变量 70 2.2.2 使用变量 70 2.2.3 只读变量 71 2.2.4 删除变量 72 任务2.3 特殊符号 72 任务...

    绝版经典《Linux与UNIX Shell编程指南》

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    shell教程-30章,下了之后会让你大吃一惊,相当好

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    linux shell 编程教程

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    Linux shell编程指南

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    shell编程和unix命令

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    LINUX与UNIX SHELL编程指南

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    LINUX与UNIX Shell编程指南

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    LINUX 与 UNIX SHELL编程指南

    10.10.6 从 sed 输出中设置 shell 变量 102 10.11 快速一行命令 102 10.12 小结 103 第 11 章 合并与分割 104 11.1 sort 用法 104 11.1.1 概述 104 11.1.2 sort 选项 104 11.1.3 保存输出 105 11.1.4 sort ...

Global site tag (gtag.js) - Google Analytics