如何從文件中獲取最大「速率」和相應的「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