【发布时间】:2013-07-22 20:50:59
【问题描述】:
我正在编写一个 bash 代码来获取服务器中的事务总数,包括成功和失败,到目前为止这是我的输出
TOTAL SUCCESS FAILED AVERAGE SUCCESS AVERAGE FAILED
=====================================================================
6139386 2079679 4059707 33.874381 66.125619
非常完美,它还为每个事件生成一个文件,我的意思是一个用于成功交易的文件,一个用于失败交易的文件,一个用于所有交易的文件
现在,从失败的交易文件中,我需要详细了解导致交易失败的错误及其频率。
我编写了这段代码
cat /tmp/test1.txt | grep "|-1|" | cut -d'|' -f34 > /tmp/test3_1.txt
ERR=$(sort test3_1.txt | uniq -c)
其中 test1.txt 是存储失败事务的文件,test3_1.txt 是存储错误的文件
如您所见,我将此输出保存在一个变量中以供以后使用,这就是输出
82 -11
7241 -4
10040 1
7 10
3115778 1000
146 10002035
其中左边的数字是频率,右边的数字是错误码
到目前为止,这正是我想要的,但我还需要根据每个错误代码的频率和失败事务的总数来计算每个错误代码的平均比率,基本上是这样的表格
82 -11 0.002%
7241 -4 0.178%
10040 1 0.247%
7 10 0.000%
3115778 1000 76.749%
146 10002035 0.004%
基于失败事务的总数 (4059707)
现在,我不知道该怎么做是只选择左列进行适当的计算,以获得每个错误的平均比率并将其显示在右列中。
到目前为止,我得到了这段代码:
for i in $(awk '{print $1}' test3_1.txt) do;
AVEE=$($i * 100 | bc)
但是没用
【问题讨论】:
-
你有什么输入,你想要什么输出? cmd 输出
!= 4059707第一列的总和。可以吗?或者我没有正确理解。 -
我的putput是第一个表(2列),我想要的是第二个(3列)。
4059707是失败交易的总数 -
请解释一下,从你的第一个表,我如何才能得到
4059707的号码? -
它来自事务日志,它整天都在更新,并且永远不会相同,对于这个例子,我在第一个表上采用了我运行脚本来测试的输出之一,其中你有所有(总,成功,失败,平均成功,平均失败)你从失败列中得到数字
-
我不知道您是否阅读了我的第一条评论。如果第一列的总和应该 ` = 4059707
, your cmd to get the **first table** (thecat|grep|cut|sort|uniq) would have problem. becausethe sum != 4059707`