Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Linux bash shell脚本从文件中获取最大数量_Bash_File_Shell_Numbers_Max - Fatal编程技术网

如何使用Linux bash shell脚本从文件中获取最大数量

如何使用Linux bash shell脚本从文件中获取最大数量,bash,file,shell,numbers,max,Bash,File,Shell,Numbers,Max,如何从如下文件中获取最大“速率”和相应的“log2c”值? e、 g:最大速率为89.5039,log2c为3.0。非常感谢 log2c=5.0 rate=88.7619 log2c=-1.0 rate=86.5412 log2c=11.0 rate=86.1482 log2c=3.0 rate=89.5039 log2c=-3.0 rate=85.5614 log2c=9.0 rate=81.4302 使用排序: sort -t= -nr -k3 inputfile | head -1 对

如何从如下文件中获取最大“速率”和相应的“log2c”值? e、 g:最大速率为89.5039,log2c为3.0。非常感谢

log2c=5.0 rate=88.7619
log2c=-1.0 rate=86.5412
log2c=11.0 rate=86.1482
log2c=3.0 rate=89.5039
log2c=-3.0 rate=85.5614
log2c=9.0 rate=81.4302
使用
排序

sort -t= -nr -k3 inputfile | head -1
对于给定的输入,它将返回:

log2c=3.0 rate=89.5039
如果要将值读入变量中,可以使用内置的
read

$ IFS=$' =' read -a var <<< $(sort -t= -nr -k3 inputfile | head -1)
$ echo ${var[1]}
3.0
$ echo ${var[3]}
89.5039

$IFS=$'='read-对于非常大的文件,使用
排序将非常缓慢。在这种情况下,最好使用awk之类的工具,它只需要一次通过:

$ awk -F= 'BEGIN { max = -inf } { if ($3 > max) { max = $3; line = $0 } } END { print line }' test.txt
log2c=3.0 rate=89.5039
此操作的时间复杂度是线性的,而空间复杂度是恒定的(并且很小)。说明:

  • awk-F='…'test.txt
    :在test.txt上调用awk,使用
    =
    作为字段分隔符
  • BEGIN{max=-inf}
    :初始化
    max
    ,使其始终小于您正在阅读的内容
  • {if($3>max){max=$3;line=$0;}}
    :对于每个输入行,如果
    max
    小于第三个字段的值(
    $3
    ),则更新它并记住当前行的值(
    $0
  • END{print line}
    :最后,打印我们在读取输入时记住的行

  • 或者
    IFS=$'='readunusedlog2cunusedrate@anishsane当你打算用read读一行时,也不再需要使用head。哦,是的,没错。。。我没有费心更改
    $(…)
    的内容,谢谢。以下工作:filename=“${prefix}.txt”IFS=$'='read-a var您不在Awk中执行此操作有什么原因吗?这应该是一个简单的入门教程,devnull的解决方案在bash中非常有效。但是,我的inputfile名称来自可变的$filename。所以,我把这些话放进了echo“…”sh.原谅我,我是一个新手。它在我的linux和max上都不适用于gawk 4.1.4,除非你用“print$line”替换“print line”