获取文件中最小数字的索引
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 file
和expected 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”,按照一般数值排序。以上是关于获取文件中最小数字的索引的主要内容,如果未能解决你的问题,请参考以下文章