在 vim 中匹配模式后添加行号

在 vim 中匹配模式后添加行号

我有原始序列,我必须将其转换为 fasta 格式。所以读取如下:

CTACGGTGTGCTCTTCCGATCTGACTATG
AGTTGGTGTGCTCTCCCGATCTCGCTCCCTC
GTGAGGTGTGCTCTTCCGATCTCCGGCAGTGTGCT

我想在每行上方添加 > 和数字,所以最后它看起来应该是这样的:

>1
CTACGGTGTGCTCTTCCGATCTGACTATG
>2
AGTTGGTGTGCTCTCCCGATCTCGCTCCCTC
>3
GTGAGGTGTGCTCTTCCGATCTCCGGCAGTGTGCT

我该如何在 vim 中操作?如果没有 vim,我可以使用 sed 命令吗?

答案1

在 vim 中,我会添加第一行 ( >1),然后创建一个简单的宏,该宏会提取编号行,向下移动一行,粘贴提取的内容并增加数字。在 vim 正常模式命令中:yyjpCtrl-a。如果您将宏保存到注册q,请使用 执行它@q

假设第一条记录在第一行,您可以通过两次调用 GNU sed 来完成此操作,如下所示:

sed '=' file | sed 's/^[0-9]/>&/'

或者nl仅使用包含数据的数字行:

nl file | sed 's/^ *\([0-9]\+\)\t*/>\1\n/'

可以更直观地完成awk

awk 'NF { print ">" ++i "\n" $0 }' file

所有情况下的输出:

>1
CTACGGTGTGCTCTTCCGATCTGACTATG
>2
AGTTGGTGTGCTCTCCCGATCTCGCTCCCTC
>3
GTGAGGTGTGCTCTTCCGATCTCCGGCAGTGTGCT

答案2

要插入将在下一个命令中使用的行号和标记,可以使用以下命令:

:%s/^/\=printf('>%-d ', line('.'))

要插入换行符,请将一些提示替换为“\r”。在这种情况下,像这样的简单操作应该可以完成此任务

:'<,'>s/ /\r

还有更多 vim 技巧http://vim.wikia.com/wiki/Vim_Tips_Wiki

相关内容