将文本添加到文本文件中的每个第n行

时间:2016-11-28 13:01:34

标签: sed bioinformatics

此sed comandline脚本在文件的每一行前面添加文本:

sed -i 's/^/to be prepended/g' text.txt

我怎样才能这样做只在每一个 行上做到这一点?

我正在使用测序数据和" norma"多个fasta格式首先有一个标识符线,用>然后有其他文字。

下一行以随机DNA序列开始,例如" AATTGCC"等等,当该字符串完成其新行和新标识符时,如何将文本(附加基数)添加到序列行的开头?

3 个答案:

答案 0 :(得分:4)

只需使用以下GNU sed语法:

sed '0~Ns/^/to be prepended/'
#    ^^^
#    set N to the number you want!
例如,将HA预先添加到4的倍数的行号:

$ seq 10 | sed '0~4s/^/HA/'
1
2
3
HA4
5
6
7
HA8
9
10

或者4N+1

表单上的那些人
$ seq 10 | sed '1~4s/^/HA/'
HA1
2
3
4
HA5
6
7
8
HA9
10

来自sed manual → 3.2. Selecting lines with sed

  

<强>第一〜步骤

     

此GNU扩展名匹配从第一行开始的每个stepth行。特别地,当存在非负n时,将选择线,使得当前行数等于第一+(n *步)。因此,要选择奇数行,可以使用1~2;从第二行开始选择每一行,将使用“2~3”;从第十行开始选择每五行,使用'10~5';并且'50~0'只是说50的一种模糊方式。

顺便说一句,没有必要使用/g进行全局替换,因为^只能在每一行上替换一次。

答案 1 :(得分:1)

$ seq 10 | perl -pe's/^/to be prepended / unless $. % 3'
1
2
to be prepended 3
4
5
to be prepended 6
7
8
to be prepended 9
10
$ seq 10 | perl -pe's/^/to be prepended / unless $. % 3 - 1'
to be prepended 1
2
3
to be prepended 4
5
6
to be prepended 7
8
9
to be prepended 10
$ seq 10 | perl -pe's/^/to be prepended / unless $. % 3 - 2'
1
to be prepended 2
3
4
to be prepended 5
6
7
to be prepended 8
9
10

你有个主意。

答案 2 :(得分:0)

seq 15|awk -v line=4  'NR%line==0{$0="Prepend this text : " $0}1'
1
2
3
Prepend this text : 4
5
6
7
Prepend this text : 8
9
10
11
Prepend this text : 12
13
14
15