如何使用BASH获取CSV文件每一行的最小值
问题原因
你编写的awk命令错误根源在于未正确配置CSV格式的字段分隔符:
- awk默认使用空白字符作为字段分隔符,分割后得到的每个字段末尾都携带了多余的逗号(比如第一个字段实际值为
-0.106992,) - 携带逗号的字段会被awk识别为字符串,字符串比较规则和数值比较规则完全不同,导致最小值计算逻辑失效
解决方案
调整字段分隔符为「逗号+任意数量空白」,确保分割后得到纯数值字段,正确命令如下:
awk -F ',[[:space:]]*' '{m=$1; for (i=2; i<=NF; i++) if ($i < m) m = $i; print m}' file_name
如果你的环境不支持POSIX字符类,也可以用更兼容的简化写法:
awk -F ', *' '{m=$1; for (i=2; i<=NF; i++) if ($i < m) m = $i; print m}' file_name
命令说明
-F参数指定字段分隔符,,[[:space:]]*或, *都可以匹配你CSV格式中「逗号后接任意数量空格」的分隔规则- 分割后的字段都是纯数值,后续大小比较逻辑和你原有写法一致,执行即可输出预期的每行最小值
内容的提问来源于stack exchange,提问作者Arsen Nersisyan
相关产品推荐
相关产品推荐

