我正在尝试在法斯塔的序列部分中将所有不是C
,T
,A
或G
的字符替换为N
文件-即每2行
我认为我需要awk和tr的某种组合...
要打印每隔一行:
awk '{if (NR % 2 == 0) print $0}' myfile
将这些字符替换为N
tr YRHIQ- N
...但是我不知道如何将它们组合在一起,以使字符替换仅出现在第二行,但它却打印出每一行
这是我所拥有的东西
>SEQUENCE_1
AGCYGTQA-TGCTG
>SEQUENCE_2
AGGYGTQA-TGCTC
我希望它看起来像这样:
>SEQUENCE_1
AGCNGTNANTGCTG
>SEQUENCE_2
AGGNGTNANTGCTC
但不是这样:
>SENUENCE_1
AGCNGTNANTGCTG
>SENUENCE_2
AGGNGTNANTGCTC
答案 0 :(得分:2)
由于@kvantour对fasta文件的解释,这是另一种sed解决方案,它比旧解决方案更适合您的任务:
sed '/^>/! s/[^ACTG]/N/g' file.fasta
/^>/!
::如果此行不是以>
开头,请执行以下操作,s/[^ACTG]/N/g
:将ACTG
以外的所有字符替换为N
。答案 1 :(得分:2)
您遇到的问题很容易回答,但是当您处理常规fasta文件时不会有帮助。 Fasta文件具有序列标头,后跟一行或多行,可以将其连接起来以表示序列。 Fasta文件格式大致遵循以下规则:
- 以
字符( >
开头的描述行(defline)或标头/标识符行,给出了序列的名称和/或唯一标识符,并且还可能包含其他内容信息。- 在描述行之后是标准的单字母字符串中的实际序列本身。除有效字符外的任何其他字符(包括空格,制表符,星号等)都将被忽略。
- 序列可以跨越多行。
- 通常通过在两个后续序列之间留空行来将多个单个序列FASTA文件连接到一个公共文件中,从而获得多序列FASTA格式。
要回答OP的问题,如果只想处理第二行,则要执行以下操作:
awk '!(NR%2){gsub(/[^CTAG]/, "N")}1' file.fasta
但是,在以下任何一种情况下,此方法都将失败:
更好的方法是排除标题行并处理所有其他行:
awk '!/^>/{gsub(/[^CTAG]/, "N")}1' file.fasta
答案 2 :(得分:1)
这是awk
awk 'NR%2 ==0{gsub(/[^CTAG]/, "N")}1' file
结果
SEQUENCE_1
AGCNGTNANTGCTG
SEQUENCE_2
AGGNGTNANTGCTC
说明
正如OP所希望的,我只想查找每条偶数行以应用更改,方法为
NR/2 == 0
NR
是到目前为止file
和gsub(/[^CTAG]/, "N")
替换为不是'C','T','A','G'的所有字符
[^CTAG]
^
是否定
和awk
过去了
expression
action
格式
这里expression
是NR/2==0
,并且该操作是将N
以外的gsub
字符替换为CTAG