亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 求助,請(qǐng)各位高手支招,謝謝! [打印本頁(yè)]

作者: net_lin    時(shí)間: 2010-11-29 23:50
標(biāo)題: 求助,請(qǐng)各位高手支招,謝謝!
本帖最后由 net_lin 于 2010-11-29 23:51 編輯

想對(duì)一個(gè)若干文本進(jìn)行處理和格式化輸出,用shell處理起來(lái)很麻煩,效率也不高,想請(qǐng)教一下perl怎么處理
文本類似以下格式:

段落1
id       字段1   字段2   字段3 ...
0x3138   256     456     115
0x3139   0       32      654
0x3145   156     56      185
0x3137   0       32      1654

段落2
id       字段18   字段19   字段20 ...
0x3138   256      456      115
0x3139   0        32       654
0x3145   156      56       185
0x3137   0        32       1654

段落3
id1    id2    字段1   字段2   字段3 ...
0x0054 1      fasf    412     8098
0x0054 2      asf     1412    1098
0x0014 1      fdassf  12      109

段落4
id1    id2    字段16   字段17   字段18 ...
0x0054 1      kmsdf    42       98
0x0054 2      fadff    2        0

共有4個(gè)段落,段落間空行分隔,每個(gè)段落頭有段落頭名稱,每個(gè)段落頭的下一行為字段名稱,字段個(gè)數(shù)不確定,字段間以多個(gè)空格分隔,段落1和段落2通過(guò)第一個(gè)字段(id)可進(jìn)行關(guān)聯(lián),段落3和段落4通過(guò)第一個(gè)字段(id1)和第二個(gè)字段(id2)可關(guān)聯(lián),要求將第1個(gè)段落和第2個(gè)段落關(guān)聯(lián)后將所有字段放在同一行內(nèi)輸出(字段分隔符為逗號(hào)),即輸出為:
id,字段1,字段2,字段3 ... 字段18,字段19,字段20 ...
第3個(gè)段落和第4個(gè)段落也實(shí)現(xiàn)同樣的功能,(注:段落間的關(guān)聯(lián)可能存在找不到對(duì)應(yīng)的關(guān)聯(lián)行,找不到的關(guān)聯(lián)由默認(rèn)值0替代)

額外的要求為將輸出對(duì)指定的某幾個(gè)字段進(jìn)行排序(升序或降序),各自取出按這幾個(gè)字段排序后的前10行(去重后輸出),需要考慮一定的效率,如1M大小的文件處理不超過(guò)2秒,請(qǐng)各位高手支招,謝謝!
作者: zhlong8    時(shí)間: 2010-11-30 00:25
建個(gè) hash, key 為 id 值為(字段 => 值)的 hashref。

{
    id => {
        字段1 => 值1,
        字段2  => 值2,
        ...
    },
    ...
}

你用數(shù)據(jù)庫(kù)更簡(jiǎn)單
作者: 小鷺    時(shí)間: 2010-11-30 10:30
只寫了部分符合條件的語(yǔ)句,你看著改改吧

# cat data2.txt
section1
id       col1   col2     col3
0x3138   256     456     115
0x3139   0       32      654
0x3145   156     56      185
0x3137   0       32      1654

section2
id       col18   col19     col20
0x3138   256      456      115
0x3139   0        32       654
0x3145   156      56       185
0x3137   0        32       1654


# perl -00  -ne '/section/  and print' data2.txt| perl -aF'\s+' -ne '/section/ or $rec{$F[0]} .= " " . join(" ",@F[1..3]); END{foreach (reverse sort keys %rec){print "$_  $rec{$_}\n"}}'

id   col1 col2 col3 col18 col19 col20
0x3145   156 56 185 156 56 185
0x3139   0 32 654 0 32 654
0x3138   256 456 115 256 456 115
0x3137   0 32 1654 0 32 1654
作者: flw    時(shí)間: 2010-11-30 10:57
需求說(shuō)的挺清楚的。
可既然知道這事兒 Perl 能干,為什么不學(xué)學(xué) Perl 呢?這可是一個(gè)不錯(cuò)的契機(jī)呢。
你這樣子下去永遠(yuǎn)都不會(huì) Perl,遇到類似的問(wèn)題永遠(yuǎn)都得問(wèn)人。




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2