- 论坛徽章:
- 0
|
本帖最后由 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秒,请各位高手支招,谢谢! |
|