使用awk、sed和sort来查找浮点数组的最小值和索引的解决方法如下:
-
创建一个包含浮点数组的文件,例如numbers.txt
,每个数字占一行。
echo -e "1.2\n3.4\n5.6\n7.8" > numbers.txt
-
使用awk命令来找到最小值和索引:
awk 'NR==1{min=$1; idx=1} $1<min{min=$1; idx=NR} END{print "Min: " min "\nIndex: " idx}' numbers.txt
解释:
NR==1{min=$1; idx=1}
:将第一行的数字设为最小值,并将索引设为1。
$1<min{min=$1; idx=NR}
:如果当前行的数字小于最小值,则更新最小值,并将索引设为当前行号。
END{print "Min: " min "\nIndex: " idx}
:在处理完所有行后,打印最小值和索引。
输出:
Min: 1.2
Index: 1
-
如果想要按照最小值的顺序对数组进行排序,可以使用sort命令:
sort -n numbers.txt | awk 'NR==1{min=$1; idx=1} $1==min{idx=idx","NR} $1>min{exit} END{print "Min: " min "\nIndex: " idx}'
解释:
sort -n numbers.txt
:对数组进行排序,-n
表示按照数值进行排序。
awk 'NR==1{min=$1; idx=1} $1==min{idx=idx","NR} $1>min{exit} END{print "Min: " min "\nIndex: " idx}'
:遍历排序后的数组,找到最小值和对应的索引。
NR==1{min=$1; idx=1}
:将第一行的数字设为最小值,并将索引设为1。
$1==min{idx=idx","NR}
:如果当前行的数字等于最小值,则将当前行号追加到索引后面。
$1>min{exit}
:如果当前行的数字大于最小值,则退出循环,因为已经找到了最小值。
END{print "Min: " min "\nIndex: " idx}
:在处理完所有行后,打印最小值和索引。
输出:
Min: 1.2
Index: 1