2016-11-28 64 views
2

这sed的comandline脚本预先考虑在一个文件中的每一行文字:添加文字到每个n阶行的文本文件

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

我怎样才能使它所以只做到这一点对每n 线?

我正在使用测序数据,并且在“norma”多个fasta格式中,首先有一个标识符行用>来盯着,然后有额外的文本。

下一行以像“AATTGCC”等随机DNA序列开始,当该字符串完成其新行和新标识符时,我如何在序列行的开头添加文本(其他基)?

+1

Fasta格式并不总是交替的标题/序列行,你不应该依赖它!只需使用只有标题行以'>'开头的事实 –

回答

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 

你有个想法。

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扩展第一起始线上的每个第STEP线相匹配。特别是,当存在一个非负的n时,会选择行,这样当前的行号等于first +(n * step)。因此,要选择奇数行,可以使用1〜2;从第二个开始选择每第三行,将使用'2〜3';从第十行开始选择第五行,使用'10〜5';和'50〜0’ 是说50

顺便说的只是一个模糊的方式,就没有必要使用/g全球更换,因为^只需一次在每一行更换。

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 
相关问题