Board logo

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

作者: sweet惜缘    时间: 2016-3-29 13:14     标题: [已解决]如何根据两个文本第一列的内容,将一个文本其他列的内容合并?

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           



灰常感谢~~~~
作者: CrLf    时间: 2016-3-29 13:21

既然索引都是顺序的,那直接用 sort 不行吗
作者: codegay    时间: 2016-3-29 13:25

楼主又来了.我都快学会julia了.
作者: sweet惜缘    时间: 2016-3-29 14:14

回复 2# CrLf

问题是target中除了第一列是顺序的,后面的是与第一列有关的数据~第一列的顺序改变,后面几列也要随之变化。。
我昨天试图编写matlab程序,但是matlab不支持字符串批量赋值,所以就上咱们这求助了~~
作者: sweet惜缘    时间: 2016-3-29 14:15

回复 3# codegay


    恭喜~我还在matlab阶段  - -
作者: codegay    时间: 2016-3-29 18:18

本帖最后由 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]
复制代码

作者: happy886rr    时间: 2016-3-29 19:30

本帖最后由 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
复制代码

作者: sweet惜缘    时间: 2016-3-30 13:43

回复 6# codegay


    不知道为什么跑不出来~不过还是谢啦~~辛苦~~
作者: sweet惜缘    时间: 2016-3-30 13:44

回复 7# happy886rr


    代码有效~~~感谢!!




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