Bash 如何解析csv文件以在第2列的文件中找到“失败”,并找到第7列的平均值

Bash 如何解析csv文件以在第2列的文件中找到“失败”,并找到第7列的平均值,bash,csv,average,Bash,Csv,Average,这就是我所能做到的。有了这个,我可以得到所有的错误和它们的响应时间。但是我很难从所有响应时间的组合中找到平均值。不完全清楚您要做什么,但是如果您要查找第二个逗号分隔字段列(其中第七个字段为false)的算术平均值,那么下面使用awk给出一个答案: awk-F',''$7==false{F++;sum+=$2}END{print sum/F}'$@ 设置字段分隔符为,然后解析仅第七个逗号分隔字段完全为false的行,也考虑TeloWER $ 7=false,递增计数器F,并将第二列添加到和变量。在

这就是我所能做到的。有了这个,我可以得到所有的错误和它们的响应时间。但是我很难从所有响应时间的组合中找到平均值。

不完全清楚您要做什么,但是如果您要查找第二个逗号分隔字段列(其中第七个字段为false)的算术平均值,那么下面使用awk给出一个答案:

awk-F',''$7==false{F++;sum+=$2}END{print sum/F}'$@

设置字段分隔符为,然后解析仅第七个逗号分隔字段完全为false的行,也考虑TeloWER $ 7=false,递增计数器F,并将第二列添加到和变量。在运行完所有输入文件的所有行之后,脚本通过将总和除以键入的行数来打印算术平均值。后面的$@将把每个参数作为此awk命令的文件发送到shell脚本

关于字段的注意事项:awk是一个索引,但0通常有一个特殊值$0是整行,$1是第一个字段,依此类推。awk非常灵活,因此您也可以使用$i引用变量i表示的字段,包括$NF-1引用行最后一个字段之前的字段内容

非分隔逗号:
如果您的数据中可能有带逗号的引用值或转义逗号,则awk或cut中的字段计算将不起作用。一个合适的CSV解析器需要一种比bash更完整的语言,再加上awk、sed或cut等附加语言,这比创建自己的更可取。或者,如果您控制格式,则可以考虑不同的分隔符,例如Tab或专用ASCII记录分隔符Rs,A.K.AU+01E,信息分隔符二,您可以在BASH中输入$\x1e和AWK以及大多数其他语言,如\x1E.< /P>,您需要每个行2和7的平均值还是整个CSV文件的平均值?考虑阅读,然后用更详细的更新问题,谢谢大家的回答。第2列获得了所有的响应时间,第7列显示是否为错误。我想计算第2列的平均值。我想得到所有错误的平均响应时间。如果你将问题细化到包括样本输入和预期输出,以及你在上述评论和我的答案评论中所做的澄清,我将给这个问题a+1。如果我的回答能解决您的问题,请接受我的回答;如果对您整体有帮助,请给我+1分。否则,请就其如何不解决您的问题发表评论,并提供澄清信息。见上文肯特的评论;考虑一下您可以如何帮助我们。一个潜在的问题是,需要澄清的是,正在使用的CSV文件是否包含转义序列。如果CSV中的字段包含逗号或换行符,则会发生这种情况。如果是这样,则需要将它们转义为有效的CSV。CSV转义通过将值置于双引号中工作,允许用于数据的逗号和换行符与字段分隔符分开。CSV转义可能由于其他原因而启用。重要的一点是,如果文件包含CSV转义,那么涉及cut和awk等unix工具的解决方案将无法正常工作。相反,有必要切换到支持CSV的工具。感谢您的解释。你明白我想做什么,但是这个脚本不起作用。原因是它得到了第2列和第7列合并的平均值。而第7列是“false”的位置。我不需要第7列的平均值,我只是想得到第2列的平均值。你是说第2列中所有行的平均值,其中第7列为false?是的,列中所有行的平均值2@spanglyleek–我更新了我的答案,以说明我对你问题的新理解,但是我仍然恳求你更新这个问题。我如何解析整个csv文件来打印请求的总量,例如:100个请求,90个已通过,平均响应时间为。10失败,平均响应时间为。
grep "false" $1 | cut -d ',' -f2,7