很长很短,但有没有办法复制选择行的末尾并将文本附加到该行。我想要实现的就是这个。
我拥有的
>13_gnd
atcg
>14_galF
atgc
我想要的是
>13_gnd_gnd
atcg
>14_galF_galF
atgc
因此,以复制最后一个单词开头的所有行>
并将其附加到行尾。谢谢。
答案1
$ sed 's/_[^_]*$/&&/' file
>13_gnd_gnd
atcg
>14_galF_galF
atgc
替换sed
将匹配每行的最后一个下划线及其后面的内容,直至行尾。这就是模式_[^_]*$
的作用(“匹配可能后跟其他非下划线字符的下划线和行尾”)。它会代替这(包括下划线)与匹配的任何内容两次(这就是&&
替换位中的内容)。
由于这似乎是一个文件法斯塔格式,并且由于基因组序列不能包含下划线,因此不需要>
在该行的开头进行特殊测试。
答案2
短的awk解决方案:
awk -F'_' '$0~/^>/{ $0=$0 FS $NF }1' file
输出:
>13_gnd_gnd
atcg
>14_galF_galF
atgc
细节:
-F'_'
- 字段分隔符$0~/^>/
- 如果该行以以下内容开头,则执行操作>
$0=$0 FS $NF
- 将最后一个字段值附加到末尾