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

[文本处理] [已解决]如何根据两个文本第一列的内容,将一个文本其他列的内容合并?

[复制链接]
发表于 2016-3-29 13:14:13 | 显示全部楼层 |阅读模式
http://pan.baidu.com/s/1kVGmxef       target.txt 总共66+kb

index.txt中是所需要更改的索引顺序,即把target.txt中根据第一列与index中的对比,然后更改target.txt中的顺序。
index.txt内容如下:
DCC0001
DCC0002
DCC0003
DCC0006
DCC0007
DCC0008
DCC0009
DCC0010
...
共759行
target.txt内容如下:
DCC0001         P12314          P00533          O75015          P09871          P00736          P02745          P02746          P02747          P08637          P12318          P31994          P31995           
DCC0006         P14784          P01589          P31785                                                                                                     
DCC0007         P12314          O75015          P09871          P00736          P02745          P02746          P02747          P08637          P12318          P31994          P31995          P01375           
DCC0008         P12314          P00533          O75015          P09871          P00736          P02745          P02746          P02747          P08637          P12318          P31994          P31995          P04626
DCC0009         P12314          O75015          P09871          P00736          P02745          P02746          P02747          P08637          P12318          P31994          P31995          P11836           
...
共652行~希望更改后得到output.txt第一列与index中的顺序一致,共759行,即把target中没有的drug根据index中的drug数据增加该行即可,如下列红色,如下:
DCC0001         P12314          P00533          O75015          P09871          P00736          P02745          P02746          P02747          P08637          P12318          P31994          P31995           
DCC0002                                                                                                                        
DCC0003
                                                                                                              
DCC0006         P14784          P01589          P31785                                                                                                     
DCC0007         P12314          O75015          P09871          P00736          P02745          P02746          P02747          P08637          P12318          P31994          P31995          P01375           
DCC0008         P12314          P00533          O75015          P09871          P00736          P02745          P02746          P02747          P08637          P12318          P31994          P31995          P04626
DCC0009         P12314          O75015          P09871          P00736          P02745          P02746          P02747          P08637          P12318          P31994          P31995          P11836           



灰常感谢~~~~

评分

参与人数 1PB -4 收起 理由
pcl_test -4 未按版规发帖

查看全部评分

发表于 2016-3-29 13:21:13 | 显示全部楼层
既然索引都是顺序的,那直接用 sort 不行吗
发表于 2016-3-29 13:25:35 | 显示全部楼层
楼主又来了.我都快学会julia了.
 楼主| 发表于 2016-3-29 14:14:41 | 显示全部楼层
回复 2# CrLf

问题是target中除了第一列是顺序的,后面的是与第一列有关的数据~第一列的顺序改变,后面几列也要随之变化。。
我昨天试图编写matlab程序,但是matlab不支持字符串批量赋值,所以就上咱们这求助了~~
 楼主| 发表于 2016-3-29 14:15:12 | 显示全部楼层
回复 3# codegay


    恭喜~我还在matlab阶段  - -
发表于 2016-3-29 18:18:38 | 显示全部楼层
本帖最后由 codegay 于 2016-3-30 16:59 编辑
  1. #="""
  2. julia文件合并排序.jl
  3. http://bbs.bathome.net/thread-39841-1-1.html
  4. 2016年3月29日 17:29:48 codegay
  5. 思路如crlf所说,找出不存target中id,合并然后sort排序就可以.
  6. """=#

  7. indexio=open("index2.txt")
  8. targetio=open("target2.txt")
  9. indtxt=[strip(r) for r in readlines(indexio)]
  10. #@show indtxt
  11. tartxt=readlines(targetio)
  12. tarind=[split(r)[1] for r in tartxt]
  13. #@show tarind
  14. notin=filter(x -> !(x in tarind),indtxt)
  15. #@show notin
  16. notin=[string(r,"\r\n") for r in notin]
  17. #@show sort([tartxt;notin])
  18. result=open("out.txt","w+")
  19. write(result,sort([tartxt;notin]))

  20. close(indexio)
  21. close(targetio)
  22. close(result)
  23. #[Finished in 4.3s]
复制代码
发表于 2016-3-29 19:30:07 | 显示全部楼层
本帖最后由 happy886rr 于 2016-3-29 19:41 编辑

回复 1# sweet惜缘
  1. @echo off
  2. for /f "tokens=1*" %%a in (target.txt) do (set "%%a=%%a  %%b")
  3. (for /f "tokens=1" %%a in (index.txt) do (if not defined %%a (echo %%a) else call echo %%%%a%%))>new.txt
复制代码
 楼主| 发表于 2016-3-30 13:43:53 | 显示全部楼层
回复 6# codegay


    不知道为什么跑不出来~不过还是谢啦~~辛苦~~
 楼主| 发表于 2016-3-30 13:44:17 | 显示全部楼层
回复 7# happy886rr


    代码有效~~~感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 10:48 , Processed in 0.020102 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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