获取文件中最小数字的索引

Posted

技术标签:

【中文标题】获取文件中最小数字的索引【英文标题】:Obtain index of the smallest number in a file 【发布时间】:2019-04-06 08:24:10 【问题描述】:

有一个输入文件“data.txt”包含以下数字

11.0    22.0    33.0    -10.5    -2

如何找到文件中最小数字的值和索引。在这种情况下,输出将是

Value -10.5
Index 4

【问题讨论】:

请添加一些代码来读写文件 我不确定 cat 是否是用于从文本文件中读取数字的正确命令 你能告诉我们input fileexpected output吗? 【参考方案1】:

使用 Perl 单行代码

> cat data.txt
11.0    22.0    33.0    0.5    44.0
> perl -lane ' @arr=sort @F;foreach(@F)  $x++;  print "$x $_" if $arr[0]==$_  ' data.txt
4 0.5
>

【讨论】:

感谢您的回答。我可以输出两个变量 index=4 和 value=-10.5 以便我可以将这两个变量传递给代码的其他部分吗?我还修改了问题以包含负数。请相应地修改您的解决方案,因为此代码不适用于负数。【参考方案2】:

使用grep 将其拆分为多行,使用cat -n 附加行号(索引),然后在值上使用sort。对于最小的数字,选择第一条记录(head -1

# here is the file...
$ cat data.txt
11.0 22.0 33.0 0.5 44.0

# here is the output you want
$ grep -o '[^ ]\+' data.txt | cat -n | sort -g --key=2 | head -1
 4  0.5

如果你想要单独变量中的值

# store the value in a variable
$ res=`grep -o '[^ ]\+' data.txt | cat -n | sort -g --key=2 | head -1 | xargs`

# then cut out the data
$ index=`echo $res | cut -f1 -d' '`
$ value=`echo $res | cut -f2 -d' '`

$ echo $index
 4
$ echo $value
 0.5

【讨论】:

感谢您的回答。我可以输出两个变量 idxex=4 和 value=0.5 以便我可以将这两个变量传递给代码的其他部分吗? 更新了答案,见上文。 感谢您为您的代码添加注释。此代码不适用于负数。例如,如果文件包含 -10.5,则应将其选为最小数字。我相应地修改了问题。要处理负数,我想你需要做 sort -r --key=2。您能否相应地修改您的答案。 请修正代码,将“sort -r”修改为“sort -g”,按照一般数值排序。

以上是关于获取文件中最小数字的索引的主要内容,如果未能解决你的问题,请参考以下文章

在列表中找到第 n 个最小的数字?

获取数组中 n 个最小元素的索引

获取R中矩阵每一行中K个最小或最大元素的索引

获取长向量中最小值索引的有效方法,python

如何通过索引号获取文本段落

忽略数组中的元素值时获取最小索引