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

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

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   ......


灰常感谢~~~~
1

评分人数

  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
复制代码

TOP

回复 2# pcl_test


    运行粗来结果不对~~~大神你到底有没有认真读题~~~PB-5~~~

TOP

回复 3# sweet惜缘


    能先告诉我你网盘上的DDI.txt跟你这贴出来的为什么不同?

TOP

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

回复 4# pcl_test


    = =~要不我重传个excle文件吧~~这个比较正确~格式~~

TOP

回复 4# pcl_test


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

新鲜热乎的excle文件~~~~速来下载啦

TOP

回复 5# sweet惜缘

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

DDI.txt中则是每一个drug对应的freature,共244列
CID000000896  0.094964932         0.017092211          0.155580108                   ...
CID000002160 -0.062096048         -0.086881386          0.20744211                  ...

TOP

回复 7# pcl_test


    恩~~确实~~~解决啦~~~感谢~~~

TOP

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


灰常感谢思密达

TOP

回复 7# pcl_test


    大神。。。。去哪了~~~~求助

TOP

回复 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();
复制代码

TOP

回复 11# pcl_test


    灰常感谢!!!

TOP

返回列表