BASH如何从每一行中获取最小值

Posted

技术标签:

【中文标题】BASH如何从每一行中获取最小值【英文标题】:BASH How to get minimum value from each row 【发布时间】:2022-01-09 07:26:02 【问题描述】:

我有这样的 csv 文件:

-0.106992, -0.106992, -0.059528, -0.059528, -0.028184, -0.028184, 0.017793, 0.017793, 0.0, 0.220367
-0.094557, -0.094557, -0.063707, -0.063707, -0.020796, -0.020796, 0.003707, 0.003707, 0.200767, 0.200767
-0.106038, -0.106038, -0.056540, -0.056540, -0.015119, -0.015119, 0.032954, 0.032954, 0.237774, 0.237774
-0.049499, -0.049499, -0.006934, -0.006934, 0.026562, 0.026562, 0.067442, 0.067442, 0.260149, 0.260149
-0.081001, -0.081001, -0.039581, -0.039581, -0.008817, -0.008817, 0.029912, 0.029912, 0.222084, 0.222084
-0.046782, -0.046782, -0.000180, -0.000180, 0.030788, 0.030788, 0.075928, 0.075928, 0.266452, 0.266452
-0.082107, -0.082107, -0.026791, -0.026791, 0.001874, 0.001874, 0.052341, 0.052341, 0.249779, 0.249779

enter image description here

我想从每一行中获取最小值。

预期的输出必须是:

-0.106992

-0.094557

-0.106038

-0.049499

-0.08100

-0.046782

-0.082107

我尝试通过 awk 获取它,但 awk 没有给出最小值:

awk 命令:

awk 'm=$1; for (i=2; i<=NF; i++) if ($i < m) m = $i; print m' file_name

输出:

-0.028184,

-0.020796,

-0.015119,

-0.006934,

-0.008817,

-0.000180,

-0.026791,

【问题讨论】:

您忘记将-v FS=', ' 添加到您的awk 命令中 【参考方案1】:

Perl 对此做了简短的处理:

perl -MList::Util=min -F', ' -E 'say min @F' file.csv
-0.106992
-0.094557
-0.106038
-0.049499
-0.081001
-0.046782
-0.082107

【讨论】:

【参考方案2】:

在每个 Unix 机器上的任何 shell 中使用任何 awk,无论每个逗号后是否有空格:

$ awk -F', *' 'min=$1; for (i=2;i<=NF;i++) if ($i<min) min=$i; print min' file
-0.106992
-0.094557
-0.106038
-0.049499
-0.081001
-0.046782
-0.082107

【讨论】:

【参考方案3】:

用红宝石:-D

ruby -F', ' -ane 'puts $F.map(&:to_f).min' file.csv

【讨论】:

【参考方案4】:

你的代码是正确的:

awk 'm=$1; for (i=2; i<=NF; i++) if ($i < m) m = $i; print m' file_name

除了必须在字段分隔符中添加逗号:

awk -F '[[:blank:],]' 'm=$1; for (i=2; i<=NF; i++) if ($i < m) m = $i; print m' file_name

[[:blank:],] 是空格、制表符和逗号。

【讨论】:

以上是关于BASH如何从每一行中获取最小值的主要内容,如果未能解决你的问题,请参考以下文章

获取二维数组中每列的第二个最小值

如何从 SQL 中的另一行获取最小值?

如何根据一行中的数字序列获取mysql-table列的最小值

如何在sql中获取行的最小最小值

从每组的第一行和最后一行获取值

如何查找excel一行中最小值