相邻同类项多行合并成一行
例题描述和简单分析
有Excel文件Book1.xlsx,数据如下所示:
A | B | C | |
1 | 源IP地址 | 目的IP地址 | 目的端口 |
2 | 10.3.126.7/32 | 10.3.126.6/32 | TCP-7946 |
3 | 10.3.126.6/32 | 10.3.126.7/32 | TCP-7946 |
4 | 10.3.126.5/32 | 10.3.126.4/32 | TCP-30013 |
5 | 10.3.126.5/32 | 10.3.126.3/32 | TCP-30013 |
6 | 10.3.126.5/32 | 10.3.126.2/32 | TCP-30013 |
7 | 10.3.126.5/32 | 10.3.126.2/32 | TCP-6002 |
8 | … | … | … |
需要将相邻的源IP地址和目的IP地址去重,并将目的端口合并,结果如下所示:
A | B | C | |
1 | 源IP地址 | 目的IP地址 | 目的端口 |
2 | 10.3.126.7/32 | 10.3.126.6/32 | TCP-7946 |
3 | 10.3.126.6/32 | 10.3.126.7/32 | TCP-7946 |
4 | 10.3.126.5/32 | 10.3.126.4/32 | TCP-30013 |
5 | 10.3.126.5/32 | 10.3.126.3/32 | TCP-30013 |
6 | 10.3.126.5/32 | 10.3.126.2/32 | TCP-30013 TCP-6002 |
7 | … | … |
解法及简要说明
在集算器中编写脚本p1.dfx,如下所示:
A | |
1 | =file("Book1.xlsx").xlsimport@t() |
2 | =A1.group@o(#1,#2;~.(#3).concat@n():目的端口) |
3 | =file("result.xlsx").xlsexport@at(A2;"sheet1") |
简要说明:
A1 Excel读成序表
A2 按前两列相邻分组(源IP地址和目的IP地址),把每组的目的端口用换行符拼成串
A3 将序表A2以追加方式导出至result.xlsx的sheet1页(若导出excel时要支持自动换行,需要提前准备该Excel文件,将sheet1的C2格设为自动换行)
http://club.excelhome.net/thread-1586911-1-1.html