我有以下文字:
title
P1 : I = -20.32;
P2 : I = 24.07;
P3 : I = -16.68;
T_B1 : I = 24.93;
T_H1 : I = -7.49;
T_B2 : I = 25.48;
T_H2 : I = -0.20;
T_B3 : I = 25.81;
T_H3 : I = 5.32;
T_B4 : I = 26.00;
T_H4 : I = 9.27;
T_B5 : I = 26.09;
T_H5 : I = 11.84;
T_B5 : I = 26.11;
T_H5 : I = 11.04;
我只想要 T_H* 的最大值
T_H5 : I = 11.84;
我試過這樣的事情:
sort -t= -nr -k3 text | head -1
我不明白我是否必須使用 sort 或 awk 因為我只想在特定的行上進行排序。我試圖用谷歌搜索它很多次并閱讀排序命令手冊,但我沒有得到我想要的。如果有人可以幫助我這會很酷:)謝謝
uj5u.com熱心網友回復:
如果您想使用 UNIX 工具解決這個問題,那么您應該使用一種工具用于每個目的的 UNIX 方法。
grep '^T_H' < input | # Filter
sort -t= -nr -k3 | # sort
head -n1
當然還有其他方法可以用更少的管道來解決它,但這似乎不是你想要的。
uj5u.com熱心網友回復:
兩者都可以,但 Awk 可以更加高效和簡潔。
awk '/^T_H[0-9]/ { x = 0 substr($1, 4)
if (maxx < x) maxx = x }
END { print 0 maxx }' text
主體提取之后的整數T_H并重新計算當前最大值。該0 力轉換為數字,這也丟棄任何非數字后綴。的0 在礦井END塊類似地提供了一個數值背景關系,使得輸出將是一個號碼而不是一個空?應變,如果maxx是空的某些原因。
如果您指的是最后一個欄位的最大值而不是緊跟在 之后的數字T_H,那就更容易了;只需使用$NF代替substr(...)運算式。
如果要列印整行,請將其保存在第二個變數中,并在更新最大值時更新它。
awk '/^T_H[0-9]/ { x = 0 $NF
if (maxx < x) { res = $0; maxx = x } }
END { print res }' text
(這也說明了$NF變化。)
uj5u.com熱心網友回復:
另一個 awk 腳本,獲取 T_H* 的最大值:
awk '/^T_H/{max=($5 0>max?$5 0:max)}END{print max}' file
11.84
該$5 0允許帶出的;只獲取價值。
該值與max三元運算子中的變數進行比較。
當到達檔案末尾時,將列印最大值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314446.html
