如何从数组中找到最小值

How to find minimum values from array

我有一个像这样的制表符分隔的数组:

rs1000 0.09 red
rs1000 0.01 blue
rs2000 0.07 yellow
rs2000 0.08 black

并且我试图在第二列中取最小值作为第一列中的 rs

我希望得到这样的结果:

rs1000 0.01 blue
rs2000 0.07 Yellow

我的文件太大,无法使用 Excel,所以我需要一个 linux 脚本来实现我的目标。 你能建议我一个方法吗?

您可以使用排序两次:

sort -nk2,2 filename | sort -su -k1,1

第一次调用按第二列对文件名进行排序,第二次调用从第 1 列中选择唯一值。GNU 排序为每个唯一值选择第一行,但我依稀记得其他一些实现的行为有所不同。

最快但不是最短的是使用 awk:

awk '(!( in m))||(<m[]){m[]=; r[]=[=10=]}END { for(i in r) print r[i] }' file

具有 sort 和 awk 的 posix 兼容版本将是:

$ sort -k1,1 -k2,2n file | awk '(f!=);{f=}'