[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】如何根据多个文本共有的字段按指定规则合并内容?

本帖最后由 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   ......


灰常感谢思密达~~~~

楼主也是有年头的伸手党了。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 3# codegay


    哈哈哈哈哈 被发现了

TOP

伸手有如扒手,也是一种职业~

TOP

回复 4# WHY


    程序有效~~还是感谢啦~~~~

TOP

回复 4# WHY


    你的代码贴呢?怎么没了?
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 3# sweet惜缘


    论坛里常年问人要代码的也就你们几个,不需要用发现这个词。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复  WHY


    你的代码贴呢?怎么没了?
依山居 发表于 2016-1-8 21:40



    楼主恐怖的笑声那就是鬼上身的节奏,另我脚发抖、手发颤,于是,代码就没了~
1

评分人数

    • CrLf: 你以为代码删了我就不能加分了吗技术 + 1

TOP

可惜了  起码我们还能看看学用
目的,学习批处理

TOP

本帖最后由 pcl_test 于 2016-1-10 14:47 编辑
  1. @if (0)==(0) echo off
  2. cscript -nologo -e:jscript "%~0" < link.txt > out.txt
  3. pause & exit
  4. @end
  5. var fso = new ActiveXObject('Scripting.FileSystemObject');
  6. var arr1 = fso.OpenTextFile('DTI_one.txt').ReadAll().split('\r\n');
  7. var arr2 = fso.OpenTextFile('DTI_two.txt').ReadAll().split('\r\n');
  8. var map = [];
  9. for(var i=0; i<arr1.length; i++){
  10.     var drug_ID = arr1[i].replace(/(\S+).+/, '$1');
  11.     map[drug_ID] = arr1[i].replace(/\S+\s+(.+)/, '$1');
  12. }
  13. for(var i=0; i<arr2.length; i++){
  14.     var drug_ID = arr2[i].replace(/(\S+).+/, '$1');
  15.     map[drug_ID] += '\t' + arr2[i].replace(/\S+\s+(.+)/, '$1');
  16. }
  17. var arr = WSH.StdIn.ReadAll().split('\r\n');
  18. for(var i=0; i<arr.length; i++){
  19.     var m = arr[i].split(/\s+/);
  20.     if(map[m[0]]&&map[m[1]]) {
  21.         WSH.Echo(arr[i] + '\t' + map[m[0]] + '\t' + map[m[1]]);
  22.     }
  23. }
复制代码

TOP

返回列表