【发布时间】: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 格式化为代码,方法是选择它并单击{}按钮。