我有一个巨大的(约 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