我试图用fasta文件序列部分中的C
、T
、A
或G
替换所有字符,即每2行一次。
我想我需要把awk和tr结合起来.
打印每一行:
awk '{if (NR % 2 == 0) print $0}' myfile
将这些字符替换为N
tr YRHIQ- N
...but,我不知道如何将它们组合起来,以便字符替换只出现在第2行,但它会打印每一行
这就是我所拥有的
>SEQUENCE_1
AGCYGTQA-TGCTG
>SEQUENCE_2
AGGYGTQA-TGCTC
我想让它看起来像这样
>SEQUENCE_1
AGCNGTNANTGCTG
>SEQUENCE_2
AGGNGTNANTGCTC
但不是这样的:
>SENUENCE_1
AGCNGTNANTGCTG
>SENUENCE_2
AGGNGTNANTGCTC
发布于 2019-03-25 02:04:29
您的问题很容易回答,但在处理通用fasta文件时不会对您有所帮助。Fasta文件有一个序列头,后面有一个或多个行,可以连在一起来表示序列。Fasta文件格式大致遵循以下规则:
>
)开头的描述行(平移)或标头/标识符行给出了序列的名称和/或唯一标识符,并且还可以包含附加信息。要回答OP的问题,如果您只想处理每一行,请执行以下操作:
awk '!(NR%2){gsub(/[^CTAG]/, "N")}1' file.fasta
但是,在下列任何情况下,此方法都将失败:
一个更好的方法是排除标题行并处理所有其他行:
awk '!/^>/{gsub(/[^CTAG]/, "N")}1' file.fasta
发布于 2019-03-24 13:20:19
由于@kvantour对fasta文件的解释,这里有另一个sed解决方案比以前的解决方案更适合您的任务:
sed '/^>/! s/[^ACTG]/N/g' file.fasta
/^>/!
**:**开头,则/^>/!
**:**执行以下操作,s/[^ACTG]/N/g
**:**将除ACTG
以外的所有字符替换为N
。发布于 2019-03-24 15:56:05
这里有一个使用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
替换为不是CTAG
的gsub
https://stackoverflow.com/questions/55328659
复制相似问题