【问题标题】:AWK Counting - Weird BehaviourAWK 计数 - 奇怪的行为
【发布时间】:2018-05-23 16:18:44
【问题描述】:

我有一个包含以下格式的 csv

字段 1、字段 2、成功计数、失败计数

我编写了一个 awk 脚本来计算字段 2 值的成功计数和失败计数的总和。这个脚本似乎工作正常。但突然间,它表现得很奇怪。 它甚至在开始计数之前就加了 2。所以结果将比实际大两个。下面是我的脚本。

sed 's/\r//' FileName.csv | grep 'HTTP Requests - POST' | awk -F "," '{failure += $3; success += $4} END {print "HTTP Requests - POST,  Failure : " failure " Success : "success " Total : " success+failure;}'

然后我在执行时添加了成功打印。 它打印在下面。

2
9
27

sed 's/\r//' FileName.csv | grep 'HTTP Requests - POST' | awk -F "," '{failure += $3; success += $4; print success;} END {print "HTTP Requests - POST,  Failure : " failure " Success : "success " Total : " success+failure;}'

谁能帮忙?



CSV 如下所示。

OPERATOR,HTTP_METHOD,SUCCESS_COUNT,FAILURE_COUNT
CELL_01,HTTP Requests - POST,10,19
CELL_03,HTTP Requests - GET,12,17
CELL_04,HTTP Requests - POST,1,15
CELL_05,HTTP Requests - PUT,16,14
CELL_01,HTTP Requests - DELETE,19,13
CELL_03,HTTP Requests - POST,17,12
CELL_05,HTTP Requests - PUT,11,13



sed 用于删除 windows 换行符并将其替换为 linux 换行符。
Grep 仅用于过滤 POST 请求。


根据下面@glenn 的回答,我尝试了这个。 请参阅下面的输出

awk -F "," '/\/GET/ { sub(/\r$/,""); failure += $3; success += $4; print failure; print success; print ""; } END  {print "HTTP Requests - POST,  Failure : " failure " Success : "success " Total : " success+failure}' Sandbox.csv
0
2

0
9

0
27

预期输出 HTTP Requests - POST, Failure : 0 Success :25 Total : 25

【问题讨论】:

  • 所以你计算了一些我们看不到的东西,希望我们能告诉你为什么答案是错误的?如果您需要帮助,请提供帮助所需的所有信息。
  • 您还需要什么信息。我提供了 CSV 格式和命令。还有什么需要的吗?它所做的是遍历 csv 并提供第三列和第四列的总和,即成功计数和失败计数。
  • CSV 会有所帮助。并解释为什么需要通过sed 传递它。为什么你也需要通过grep 传递它 - 搜索你在描述中没有提到的东西。
  • 已编辑问题
  • 请不要将代码或数据放入 cmets - 这真的很难解释。相反,请单击您的问题下方的 edit 并更新问题并将 CSV 格式化为代码,方法是选择它并单击 {} 按钮。

标签: linux bash shell awk


【解决方案1】:

使用 awk 时不需要 sed 和 grep:

awk -F "," '
    /POST/ {
        sub(/\r$/,"")
        failure += $3
        success += $4
        print success
    }
    END {print "HTTP Requests - POST,  Failure : " failure " Success : "success " Total : " success+failure}
' FileName.csv

此外,第 3 列似乎是成功,第 4 列是失败,但您的代码中的变量颠倒了。这可以解释奇怪的行为吗?

【讨论】:

  • 非常感谢关于 awk 的精彩指南。但是即使文件中的失败计数为零,它仍然显示失败。
  • 奇怪的是,我尝试在每一步都使用 awk 打印成功和失败。在 POST 失败中,从 1 而不是 0 开始。在 GET 中,成功从 2 开始。
  • 用示例输出编辑了问题。
  • 那是 csv 的输出吗?这些数字没有任何意义,如果是这样的话……第一次成功是 10 .....
  • @buddhika,BenPen 的评论是给你的。鉴于您发布的输入,您期望什么输出?
猜你喜欢
  • 2011-12-08
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多