如何从数组中找到最小值
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=}'
我有一个像这样的制表符分隔的数组:
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=}'