标题: [文本处理] 【已解决】如何根据多个文本共有的字段按指定规则合并内容? [打印本页]
作者: sweet惜缘 时间: 2016-1-8 17:17 标题: 【已解决】如何根据多个文本共有的字段按指定规则合并内容?
本帖最后由 sweet惜缘 于 2016-1-10 14:40 编辑
http://pan.baidu.com/s/1c1db5PQ————DTI_one.txt
http://pan.baidu.com/s/1hrepjEW————DTI_two.txt
http://pan.baidu.com/s/1pKfwS1X————link.txt (上传受到限制,已上传到网盘)
link中为一对一的数据:共2531行
drug_ID1 drug_ID2
CID000002118 CID000000896
CID000002249 CID000002162
CID000002315 CID000002249
CID000002481 CID000001983
CID000002540 CID000002162
CID000002576 CID000002244
CID000002712 CID000002160
CID000002732 CID000002249
CID000002803 CID000002732
CID000003100 CID000002153
DTI_one.txt中则是每一个drug对应的freature1,数据类型为double,共245列
CID000000896 0.094964932 0.017092211 0.155580108 ...
CID000002160 -0.062096048 -0.086881386 0.20744211 ...
CID000002732 -0.496820789 -0.190601593 0.28186401 ...
CID000002118 -0.29739373 0.5744065 0.017642712 ...
CID000002803 0 -3.08E-16 -3.65E-16 ...
DTI_two.txt中则是每一个drug对应的freature2,数据类型为整形,共4144列
CID000000896 0 1 0 1 ...
CID000002160 0 0 1 1 ...
CID000002732 0 0 0 0 ...
CID000002118 0 1 1 0 ...
CID000002803 0 1 1 0 ...
首先希望将DTI_one.txt与DTI_two.txt中相同编号ID的feature组合一起,输入到out.txt中,如下:
feature1(245列) feature2(4144列)
CID000000896 0.094964932 0.017092211 0.155580108 ...0 1 0 1 ...
CID000002160 -0.062096048 -0.086881386 0.20744211 ...0 0 1 1 ...
CID000002732 -0.496820789 -0.190601593 0.28186401 ...0 0 0 0 ...
CID000002118 -0.29739373 0.5744065 0.017642712 ...0 1 1 0 ...
CID000002803 0 -3.08E-16 -3.65E-16 ...0 1 1 0 ...
最终希望得到文本如下,根据link.txt中的内容分别查找out.txt中drug的freature然后其在link.txt中的两个drug的先后顺序将两个drug的freature放入一行中,即为245X2+4144X2列)
drug_ID1 drug_ID2 drug1_ freature1 (245列) drug1_ freature2 (4144列) drug2_ freature1(245列) drug2_ freature2(4144列)
CID000002118 CID000000896 0.094964932 0.017092211 0.155580108 ... 0 1 0 1 ... -0.29739373 0.5744065 0.017642712.... 0 1 0 1...
CID000002249 CID000002162 -0.078018598 -0.032563755 -0.04617945 ... 1 0 1 0 ... -0.062096048 -0.086881386 0.20744211...1 0 1 0...
CID000002540 CID000002162 ......
灰常感谢思密达~~~~
作者: codegay 时间: 2016-1-8 20:42
楼主也是有年头的伸手党了。
作者: sweet惜缘 时间: 2016-1-8 20:47
回复 3# codegay
哈哈哈哈哈 被发现了
作者: WHY 时间: 2016-1-8 21:00
伸手有如扒手,也是一种职业~
作者: sweet惜缘 时间: 2016-1-8 21:34
回复 4# WHY
程序有效~~还是感谢啦~~~~
作者: 依山居 时间: 2016-1-8 21:40
回复 4# WHY
你的代码贴呢?怎么没了?
作者: codegay 时间: 2016-1-8 21:44
回复 3# sweet惜缘
论坛里常年问人要代码的也就你们几个,不需要用发现这个词。
作者: WHY 时间: 2016-1-8 22:29
回复 WHY
你的代码贴呢?怎么没了?
依山居 发表于 2016-1-8 21:40
楼主恐怖的笑声那就是鬼上身的节奏,另我脚发抖、手发颤,于是,代码就没了~
作者: hlzj88 时间: 2016-1-8 22:49
可惜了 起码我们还能看看学用
作者: sweet惜缘 时间: 2016-1-10 14:39
本帖最后由 pcl_test 于 2016-1-10 14:47 编辑
- @if (0)==(0) echo off
- cscript -nologo -e:jscript "%~0" < link.txt > out.txt
- pause & exit
- @end
-
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var arr1 = fso.OpenTextFile('DTI_one.txt').ReadAll().split('\r\n');
- var arr2 = fso.OpenTextFile('DTI_two.txt').ReadAll().split('\r\n');
-
- var map = [];
- for(var i=0; i<arr1.length; i++){
- var drug_ID = arr1[i].replace(/(\S+).+/, '$1');
- map[drug_ID] = arr1[i].replace(/\S+\s+(.+)/, '$1');
- }
-
- for(var i=0; i<arr2.length; i++){
- var drug_ID = arr2[i].replace(/(\S+).+/, '$1');
- map[drug_ID] += '\t' + arr2[i].replace(/\S+\s+(.+)/, '$1');
- }
-
- var arr = WSH.StdIn.ReadAll().split('\r\n');
- for(var i=0; i<arr.length; i++){
- var m = arr[i].split(/\s+/);
- if(map[m[0]]&&map[m[1]]) {
- WSH.Echo(arr[i] + '\t' + map[m[0]] + '\t' + map[m[1]]);
- }
- }
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |