Board logo

标题: [文本处理] [已解决]批处理如何根据两个文件共有的字段按指定规则合并内容? [打印本页]

作者: sweet惜缘    时间: 2016-1-6 18:05     标题: [已解决]批处理如何根据两个文件共有的字段按指定规则合并内容?

http://pan.baidu.com/s/1bnQl9GN————DDI.txt(470+kb,上传受到限制,已上传到网盘)

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

DDI.txt中则是每一个drug对应的freature,共244列
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                       ...            
CID000002249 -0.078018598        -0.032563755  -0.04617945                  ...         

希望得到的out.txt中的结果如下,即为2531X488的矩阵文本(根据link.txt中的内容分别查找DDI格drug的freature然后其在link.txt中的两个drug的先后顺序将两个drug的freature放入一行中,即为244X2列)
drug_ID1           drug_ID2                               drug1_ freature (244列)                                  drug2_ freature(244列)
CID000002118        CID000000896  0.094964932         0.017092211         0.155580108  ...   -0.29739373  0.5744065   0.017642712       
CID000002249        CID000002162  -0.078018598        -0.032563755  -0.04617945         ...  -0.062096048         -0.086881386          0.20744211
CID000002540        CID000002162   ......


灰常感谢~~~~
作者: pcl_test    时间: 2016-1-6 21:33

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1*" %%a in (DDI.txt) do set "#%%a=%%b"
  4. (for /f "tokens=1,2" %%a in (link.txt) do echo;%%a  %%b  !#%%a!          !#%%b!)>out.txt
  5. pause
复制代码

作者: sweet惜缘    时间: 2016-1-6 22:01

回复 2# pcl_test


    运行粗来结果不对~~~大神你到底有没有认真读题~~~PB-5~~~
作者: pcl_test    时间: 2016-1-6 22:03

回复 3# sweet惜缘


    能先告诉我你网盘上的DDI.txt跟你这贴出来的为什么不同?
作者: sweet惜缘    时间: 2016-1-6 22:05

本帖最后由 sweet惜缘 于 2016-1-6 22:08 编辑

回复 4# pcl_test


    = =~要不我重传个excle文件吧~~这个比较正确~格式~~
作者: sweet惜缘    时间: 2016-1-6 22:09

回复 4# pcl_test


    http://pan.baidu.com/s/1jH05kKe

新鲜热乎的excle文件~~~~速来下载啦
作者: pcl_test    时间: 2016-1-6 22:13

回复 5# sweet惜缘

并不感兴趣,只要你把DDI.txt弄成你在描述里说的那种格式即可

DDI.txt中则是每一个drug对应的freature,共244列
CID000000896  0.094964932         0.017092211          0.155580108                   ...
CID000002160 -0.062096048         -0.086881386          0.20744211                  ...
作者: sweet惜缘    时间: 2016-1-7 11:55

回复 7# pcl_test


    恩~~确实~~~解决啦~~~感谢~~~
作者: sweet惜缘    时间: 2016-1-7 17:03

本帖最后由 sweet惜缘 于 2016-1-7 17:48 编辑

回复 7# pcl_test


    大神~~为嘛我把DDI换成DTI 结果就出不来了哩~~~是不是因为一个是double类型的数据而另一个不是~~~
    DTI的百度云链接如下:http://pan.baidu.com/s/1eRrQfYi
   
   DTI的内容如下~~: 共245X4145列~
CID000002118        0        0        0        0        0        0        0        0        0        0        0        0        0
CID000002249        0        0        0        0        0        0        0        0        0        0        0        0        0
CID000002315        0        0        0        0        0        0        0        0        0        0        0        0        0
CID000002481        0        0        0        0        0        0        0        0        0        0        0        0        0
CID000002540        0        0        0        0        0        0        0        0        0        0        0        0        0


灰常感谢思密达
作者: sweet惜缘    时间: 2016-1-7 20:22

回复 7# pcl_test


    大神。。。。去哪了~~~~求助
作者: pcl_test    时间: 2016-1-7 20:40

回复 9# sweet惜缘
  1. //&cls&cscript -nologo -e:jscript "%~f0" "DTI.txt" "link.txt">out.txt&pause&exit
  2. var fso = new ActiveXObject('Scripting.FileSystemObject');
  3. var f1 = fso.OpenTextFile(WScript.Arguments(0), 1);
  4. var f2 = fso.OpenTextFile(WScript.Arguments(1), 1);
  5. var map={};
  6. while(!f1.AtEndOfStream){
  7.     if(/^\s*(\S+)\s+(.+)$/.test(f1.ReadLine())){
  8.         map[RegExp.$1]=RegExp.$2;
  9.     }
  10. }
  11. f1.Close();
  12. while(!f2.AtEndOfStream){
  13.     str = f2.ReadLine().split(/\s+/);
  14.     WSH.echo(str[0]+'\t'+str[1]+'\t'+map[str[0]]+'          '+map[str[1]])
  15. }
  16. f2.Close();
复制代码

作者: sweet惜缘    时间: 2016-1-8 10:41

回复 11# pcl_test


    灰常感谢!!!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2