每隔一个文本行添加一个字符

每隔一个文本行添加一个字符

我有一个巨大的(约 20G)文本文件,其中包含数百万个带标题的段落(又称段落)。标题和段落始终各占一行,例如,

阳光
这是一个阳光明媚的日子。
黑暗
洞穴是一个黑暗的地方。

我试图想出的是一个终端命令,它会遍历文本并在每个标题前面添加一个“>”,即每个奇数行(第 1、3、5 行……),例如,

>阳光
这是一个阳光明媚的日子。
>黑暗
洞穴是一个黑暗的地方。

有任何想法吗?

如果这是相关的:上面的文字只是一个例子。大多数标头都是 MD5,后跟 DNA 序列(“段落”),例如,

0002ebd9ca12d6b69dfc3066356fc299
CATTAACCATTGGATAACCTTCGGGTATATCCCATCCGTGTCTACATACTCTTGTTGCTTTGGCAGGCCGTGGTCACACACTGTGGGCTATGCCTGCATGTGCCTGCCAGAGGACCA

...我正在尝试转换成

>0002ebd9ca12d6b69dfc3066356fc299
CATTAACCATTGGATAACCTTCGGGTATATCCCATCCGTGTCTACATACTCTTGTTGCTTTGGCAGGCCGTGGTCACACACTGTGGGCTATGCCTGCATGTGCCTGCCAGAGGACCA

答案1

要编辑每隔一行(又名每隔一行),从第一行开始,使用 GNU sed,执行以下操作

sed '1~2s/^/>/'你的文件

这会将修改后的文件写入标准输出。即,如果您输入只是以上,修改后的文件就会显示在屏幕上。您可以将其放入新文件中重定向输出与一个>;例如,

sed '1~2s/^/>/'你的文件 > 你的新文件

或者,如果您想修改现有文件,请使用-i

sed-我'1~2秒/^/>/'你的文件

答案2

POSIXly:

sed 's/^/>/;n' < file.in > file.out

答案3

另一个 POSIX 答案:

paste -d'>\n' /dev/null - - <infile

得到:

>Sunshine
This is a sunny day.
>Darkness
A cave is a dark place.

答案4

awk可以尝试这样的事情,

awk 'NR % 4 == 1 {sub(/^/,">")} {print}' filename

参考

https://stackoverflow.com/questions/2099471/add-a-prefix-string-to-beginning-of-each-line

相关内容