我試圖優化一個搜索,尋找一個包含500k行資料的串列中排名最高的多項式(https://maths-people.anu.edu.au/~brent/pd/Murphy-thesis.pdf/a>)。該串列以12行為一組,每行的格式如下:
n: 533439167600904850230361756102700151678687933392166847323827307497363839257031077774321424872955045754669625577486179222154434651598903112919949771321416511589029559325246084363632977829645558547714072241
Y0: -2185827644152440194843077528225522129878
Y1: 119181810251841490251547
c0: 520196368294236390929241313007470334962
c1: 96360506527052960901419060941213412645
c2: 43791634664623702231347384357
c3: -9285559657533242039560613517
c4: 563452403603161952
c5: -21637936320
傾斜度: 137792.000
lognorm 67.52, exp_E 62.03, alpha -1.81 (proj -2.68), 3個實根
n: 533439167600904850230361756102700151678687933392166847323827307497363839257031077774321424872955045754669625577486179222154434651598903112919949771321416511589029559325246084363632977829645558547714072241
Y0: -2185827643535814056463203098120423438934
Y1: 1185320029877707674463
c0: 2018231558989478149929124495499518870153
c1: 877408379299126273318698618329767851376
c2: -103500370253681428439107986294
c3: -8603519648746439934492486528
c4: 220583232537944759
c5: -12839506680
傾斜度: 431744.000
lognorm 68.01, exp_E 62.61, alpha 0.09 (proj -1.93), 3個實根
我如何能夠根據給定引數的值對這些進行排序?(無論是lognorm還是exp_E)
uj5u.com熱心網友回復:
我不認為排序命令會在沒有 "幫助 "的情況下做你想要的事情。 所以,
- 將所有12行合并成一個超級字串 。
- 在字串前加上兩個排序欄位 。
- 根據需要進行排序 轉換回原始格式。
以下不是最有效的腳本,但它應該相當容易理解
# combine 12 lines into one super string<
# 在每一行前面加上兩個潛在的排序欄位。
gawk '
BEGIN{del="^"}
$0==""{next} ##跳過空白行
{all=全部 $0 del} ##建立起組合字串
/lognorm/{
L=$2
E=$4
sub(",",",",L)
sub(",",",",L)
print L,E,all ##復制兩個潛在的排序欄位到字串的前部
all=""
}' $1 !
sort -n -k1,1 | ## or -k2,2 ### now we sort on desired field.
gawk '{
gsub(/[^]/, "
") #用新行替換^
sub(/^[^ ]* [^ ]* /, "") # 剝離前兩個欄位(我們在上面添加)。
print $0
}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324969.html
標籤:
