+ -
当前位置:首页 → 问答吧 → 求助,请各位高手支招,谢谢!

求助,请各位高手支招,谢谢!

时间:2010-11-29

来源:互联网

本帖最后由 net_lin 于 2010-11-29 23:51 编辑

想对一个若干文本进行处理和格式化输出,用shell处理起来很麻烦,效率也不高,想请教一下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个段落,段落间空行分隔,每个段落头有段落头名称,每个段落头的下一行为字段名称,字段个数不确定,字段间以多个空格分隔,段落1和段落2通过第一个字段(id)可进行关联,段落3和段落4通过第一个字段(id1)和第二个字段(id2)可关联,要求将第1个段落和第2个段落关联后将所有字段放在同一行内输出(字段分隔符为逗号),即输出为:
id,字段1,字段2,字段3 ... 字段18,字段19,字段20 ...
第3个段落和第4个段落也实现同样的功能,(注:段落间的关联可能存在找不到对应的关联行,找不到的关联由默认值0替代)

额外的要求为将输出对指定的某几个字段进行排序(升序或降序),各自取出按这几个字段排序后的前10行(去重后输出),需要考虑一定的效率,如1M大小的文件处理不超过2秒,请各位高手支招,谢谢!

作者: net_lin   发布时间: 2010-11-29

建个 hash, key 为 id 值为(字段 => 值)的 hashref。

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

你用数据库更简单

作者: zhlong8   发布时间: 2010-11-30

热门下载

更多