标题: [文本处理] 【已解决】批处理如何提取txt文本里特定行中指定内容? [打印本页]
作者: sweet惜缘 时间: 2016-9-19 11:38 标题: 【已解决】批处理如何提取txt文本里特定行中指定内容?
如何批量提取hsa:后面的内容?
database.txt内容如下:
A<b>G Protein-coupled receptors</b>
B Rhodopsin family
C Acetylcholine (muscarinic)
D muscarinic cholinergic receptor M1 [HSA:1128] [KO:K04129]
E Pirenzepine [DG:DG00026]
F D08389 Pirenzepine (INN) Antagonist
F D01297 Pirenzepine hydrochloride (USAN) Antagonist
F D05276 Pirenzepine hydrochloride hydrate (JP17) Antagonist
E Dicycloverine [DG:DG00032]
F D07820 Dicycloverine (INN) Antagonist
F D00717 Dicyclomine hydrochloride (JAN/USP) Antagonist
D muscarinic cholinergic receptor M2 [HSA:1129] [KO:K04130]
E Oxybutynin [DGG00478]
F D00465 Oxybutynin (USAN/INN) Antagonist
F D00722 Oxybutynin chloride (USP) Antagonist
E Alvameline
F D02876 Alvameline maleate (USAN) Antagonist
E Esoxybutynin
F D04057 Esoxybutynin chloride (USAN)
提取如上部分有颜色部分,然后将结果输出到结果.txt文档中(每一行最前面的字母代表其的类别,即D为一大类,E是属于D中的一类,而F是属于E中的一类)
注:有的drug没有DG编号以及classification则空出
HSA (D) DG (E) Drug(F) classification
1128 DG00026 D08389 Antagonist
1128 DG00026 D01297 Antagonist
1128 DG00026 D05276 Antagonist
1128 DG00032 D07820 Antagonist
1128 DG00032 D00717 Antagonist
1129 DG00478 D00465 Antagonist
1129 DG00478 D00722 Antagonist
1129 D02876 Antagonist
1129 D04057
非常感谢!!!!!
作者: pcl_test 时间: 2016-9-19 12:47
本帖最后由 pcl_test 于 2016-9-28 13:28 编辑
- #*第三方http://www.bathome.net/s/tool/index.html?key=gawk
- #*&cls&gawk -f "%~f0" "database.txt">"result.txt"&pause&exit
- BEGIN{
- print "HSA(D)\t\tDG(E)\t\tDrug(F)\t\tclassification";
- hsa="";
- dg="";
- }
- {
- if(match($0,/\[HSA:([^\[]*)\]/,d)){gsub(/[[:space:]]+/,",",d[1]);hsa=d[1];dg="~"}
- if(match($0,/\[DG:([^\[]*)\]/,e))dg=e[1];
- if(match($0,/[[:space:]]+(D[0-9]{5})[[:space:]]*.*[[:space:]]+(\S+)[[:space:]]*$/,drug)){
- print hsa"\t\t"dg"\t\t"drug[1]"\t\t"drug[2];
- }
- }
复制代码
作者: xhsamuel 时间: 2016-9-19 13:26
版主是高手啊 我的问题也帮忙指点下呗
作者: sweet惜缘 时间: 2016-9-19 15:02
回复 2# pcl_test
斑竹大大超级厉害~~~崇拜!!!献上我的膝盖~
作者: sweet惜缘 时间: 2016-9-28 12:39
本帖最后由 pcl_test 于 2016-9-28 13:08 编辑
回复 2# pcl_test
大神,有个问题很棘手,就是我的原始文件中还有C开头行的HSA,您编的程序会遗漏到此种类型,我自己改了下,运行后应该搜全了,但是像下面这样的
C survivin (BIRC5) [HSA:332] [KO:K08731]
D Gataparsen [DGG01431]
E D09909 Gataparsen (USAN/INN) Antisense
E D09910 Gataparsen sodium (USAN) Antisense
D Sepantronium
E D10164 Sepantronium bromide (JAN/USAN) Inhibitor
B Nucleic acid
C DNA
D D00343 Ifosfamide (JAN/USP/INN)
D D10623 Dianhydrogalactitol (USAN/INN)
C DNA synthesis
D Bleomycin [DG:DG00705]
E D07535 Bleomycin (INN) Inhibitor
E D02177 Bleomycin sulfate (JP17/USP) Inhibitor
E D03229 Bleomycin hydrochloride (JP17) Inhibitor
本来得到的结果应该是
332 DG01431 D09909 Antisense
332 DG01431 D09910 Antisense
332 DG01431 D10164 Inhibitor
现在得到的结果是,事实上红色部分不属于HSA:332,但他也搜集进去了,这样就会出现错误,应该如何改程序呢?
332 DG01431 D09909 Antisense
332 DG01431 D09910 Antisense
332 DG01431 D10164 Inhibitor
332 DG00705 D07535 Inhibitor
332 DG00705 D02177 Inhibitor
332 DG00705 D03229 Inhibitor
作者: pcl_test 时间: 2016-9-28 13:36
本帖最后由 pcl_test 于 2016-9-28 13:47 编辑
回复 5# sweet惜缘
如何让程序知道红色部分不属于HSA:332,你把规律总结出来再说吧
求助时,务必在顶楼一次性把问题和结果交代清楚,解答者一般只看顶楼的描述,不要让解答者去猜、去帮你找规律,另外楼主如果经常要处理数据还是学习一门语言吧,老是这种提取字符串的问题,我是不感兴趣了
作者: sweet惜缘 时间: 2016-9-28 15:10
回复 6# pcl_test
好的~辛苦大大了~我自己擅长的是matlab,但是感觉批处理提取字符串好用一点,自己学习了一些,但还是属于小白阶段。仍旧感谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |