如何从文件中获取最大“速率”和相应的“log2c”值如下? 例如:最大速率是89.5039,log2c 3.0。非常感谢。如何使用Linux bash shell脚本从文件中获取最大数量
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
如何从文件中获取最大“速率”和相应的“log2c”值如下? 例如:最大速率是89.5039,log2c 3.0。非常感谢。如何使用Linux bash shell脚本从文件中获取最大数量
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
:
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
对于非常大的文件,使用sort
会很慢。在这种情况下,最好使用像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 }
:最后,打印线我们在阅读输入时记得。它不适用于我的Linux和最大与gawk 4.1.4,除非您将“print line”替换为“print $ line” –
在Awk中你没有这样做的原因吗?这只是一个简短的介绍性教程后应该是微不足道的。 – tripleee
devnull的解决方案完美地工作在bash中。但是,我的输入文件名是来自可变的$ filename。所以,我把这些文字放入回声“...”|中SH。原谅我,我是一个新手。 – Eman