找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25567|回复: 11

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

[复制链接]
发表于 2016-1-6 18:05:18 | 显示全部楼层 |阅读模式
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   ......


灰常感谢~~~~

评分

参与人数 1PB -4 收起 理由
pcl_test -4 发帖能认真点对待么

查看全部评分

发表于 2016-1-6 21:33:45 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2016-1-6 22:01:53 | 显示全部楼层
回复 2# pcl_test


    运行粗来结果不对~~~大神你到底有没有认真读题~~~PB-5~~~
发表于 2016-1-6 22:03:43 | 显示全部楼层
回复 3# sweet惜缘


    能先告诉我你网盘上的DDI.txt跟你这贴出来的为什么不同?
 楼主| 发表于 2016-1-6 22:05:08 | 显示全部楼层
本帖最后由 sweet惜缘 于 2016-1-6 22:08 编辑

回复 4# pcl_test


    = =~要不我重传个excle文件吧~~这个比较正确~格式~~
 楼主| 发表于 2016-1-6 22:09:07 | 显示全部楼层
回复 4# pcl_test


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

新鲜热乎的excle文件~~~~速来下载啦
发表于 2016-1-6 22:13:19 | 显示全部楼层
回复 5# sweet惜缘

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

DDI.txt中则是每一个drug对应的freature,共244列
CID000000896  0.094964932         0.017092211          0.155580108                   ...
CID000002160 -0.062096048         -0.086881386          0.20744211                  ...
 楼主| 发表于 2016-1-7 11:55:05 | 显示全部楼层
回复 7# pcl_test


    恩~~确实~~~解决啦~~~感谢~~~
 楼主| 发表于 2016-1-7 17:03:36 | 显示全部楼层
本帖最后由 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


灰常感谢思密达
 楼主| 发表于 2016-1-7 20:22:37 | 显示全部楼层
回复 7# pcl_test


    大神。。。。去哪了~~~~求助
发表于 2016-1-7 20:40:54 | 显示全部楼层
回复 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();
复制代码
 楼主| 发表于 2016-1-8 10:41:29 | 显示全部楼层
回复 11# pcl_test


    灰常感谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 07:43 , Processed in 0.017885 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表