标题: [文本处理] [已解决]如何根据两个文本第一列的内容,将一个文本其他列的内容合并? [打印本页]
作者: 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 编辑
- #="""
- julia文件合并排序.jl
- http://bbs.bathome.net/thread-39841-1-1.html
- 2016年3月29日 17:29:48 codegay
- 思路如crlf所说,找出不存target中id,合并然后sort排序就可以.
- """=#
-
- indexio=open("index2.txt")
- targetio=open("target2.txt")
- indtxt=[strip(r) for r in readlines(indexio)]
- #@show indtxt
- tartxt=readlines(targetio)
- tarind=[split(r)[1] for r in tartxt]
- #@show tarind
- notin=filter(x -> !(x in tarind),indtxt)
- #@show notin
- notin=[string(r,"\r\n") for r in notin]
- #@show sort([tartxt;notin])
- result=open("out.txt","w+")
- write(result,sort([tartxt;notin]))
-
- close(indexio)
- close(targetio)
- close(result)
- #[Finished in 4.3s]
复制代码
作者: happy886rr 时间: 2016-3-29 19:30
本帖最后由 happy886rr 于 2016-3-29 19:41 编辑
回复 1# sweet惜缘 - @echo off
- for /f "tokens=1*" %%a in (target.txt) do (set "%%a=%%a %%b")
- (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 |