我的文件内容如下:(两列用“制表符”分隔)
Others ___
Archaea ___
Archaea_Euryarchaeota ___
Archaea_Methanomicrobia_o_RCII ___
Bacteria1 ___
Bacteria2 ___
Bacteria;p__Acidobacteria;c__Holophagae;o__Holophagales;f__Holophagaceae;g__ g__
Bacteria;p__Acidobacteria;c__Solibacteres;o__Solibacterales;__;__ ___
Bacteria;p__Acidobacteria;c__Solibacteres;o__Solibacterales;f__;g__ g__
Bacteria;p__Acidobacteria;c__Sva0725;o__Sva0725;f__;g__ g__
Bacteria;p__Acidobacteria;c__[Chloracidobacteria];o__;f__;g__ g__
Bacteria;p__Acidobacteria;c__iii1-8;o__SJA-36;f__;g__ g__
Bacteria;p__Actinobacteria;c__Acidimicrobiia;o__Acidimicrobiales;f__;g__ g__
Bacteria;p__Actinobacteria;c__Acidimicrobiia;o__Acidimicrobiales;f__EB1017;g__ g__
Bacteria;p__Actinobacteria;c__Acidimicrobiia;o__Acidimicrobiales;f__Microthrixaceae;g__ g__
Bacteria;p__Actinobacteria;c__Actinobacteria;__;__;__ ___
我想做的是:
当我g__
在第二列中找到时,则需要用第一列中最后找到的单词(在p__或c__或o__或f__或g__之后)替换它。例如在线
Bacteria;p__Actinobacteria;c__Acidimicrobiia;o__Acidimicrobiales;f__Microthrixaceae;g__ g__
g__
第二栏中的应替换为Microthrixaceae
。
同样,对于“何时___
发现”的情况,请替换为第一列中最后找到的单词(在p__或c__或o__或f__或g__之后)。非常感谢您的建议。谢谢!
输出应如下所示:
Others ___
Archaea ___
Archaea_Euryarchaeota ___
Archaea_Methanomicrobia_o_RCII ___
Bacteria1 ___
Bacteria2 ___
Bacteria;p__Acidobacteria;c__Holophagae;o__Holophagales;f__Holophagaceae;g__ Holophagaceae
Bacteria;p__Acidobacteria;c__Solibacteres;o__Solibacterales;__;__ Solibacterales
Bacteria;p__Acidobacteria;c__Solibacteres;o__Solibacterales;f__;g__ Solibacterales
Bacteria;p__Acidobacteria;c__Sva0725;o__Sva0725;f__;g__ Sva0725
Bacteria;p__Acidobacteria;c__[Chloracidobacteria];o__;f__;g__ Chloracidobacteria
Bacteria;p__Acidobacteria;c__iii1-8;o__SJA-36;f__;g__ SJA-36
Bacteria;p__Actinobacteria;c__Acidimicrobiia;o__Acidimicrobiales;f__;g__ Acidimicrobiales
Bacteria;p__Actinobacteria;c__Acidimicrobiia;o__Acidimicrobiales;f__EB1017;g__ EB1017
Bacteria;p__Actinobacteria;c__Acidimicrobiia;o__Acidimicrobiales;f__Microthrixaceae;g__ Microthrixaceae
Bacteria;p__Actinobacteria;c__Actinobacteria;__;__;__ Actinobacteria
awk
或perl
什至sed
绝对是比纯净更好的选择bash
。这是一个perl
解决方案:
perl -pe 's/(.*?)([a-z]__\[?)([A-Za-z0-9-]+)(\])?(;[a-z]?__)*(\t)([g_]__)/$1$2$3$4$5\t$3/' yourfilename
有关为什么这样做的一些解释,请将鼠标悬停在突出显示的正则表达式字符串上:https : //regex101.com/r/tLpMCG/1
(请注意,该正则表达式与该答案中的正则表达式略有不同,因为在这里我使用perl
,但是在这里我不得不使用php
,并且在粘贴选项卡时遇到了困难。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句