如何从以下文件中获取最大的“rate”和相应的“log2c”值?例如:最大速率为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
如何从以下文件中获取最大的“rate”和相应的“log2c”值?例如:最大速率为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
:
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 unused log2c unused rate <<< "$(sort -t= -nr -k3 inputfile | head -1)"
- anishsane$(...)
的内容。 - anishsane对于非常大的文件,使用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 }
:最后,打印我们在读取输入时记住的行。