首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否有一种方法来替换所有特定字符的出现,但只在第n行上出现?

是否有一种方法来替换所有特定字符的出现,但只在第n行上出现?
EN

Stack Overflow用户
提问于 2019-03-24 13:16:04
回答 3查看 1K关注 0票数 2

我试图用fasta文件序列部分中的CTAG替换所有字符,即每2行一次。

我想我需要把awk和tr结合起来.

打印每一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '{if (NR % 2 == 0) print $0}' myfile

将这些字符替换为N

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tr YRHIQ- N

...but,我不知道如何将它们组合起来,以便字符替换只出现在第2行,但它会打印每一行

这就是我所拥有的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>SEQUENCE_1
AGCYGTQA-TGCTG
>SEQUENCE_2
AGGYGTQA-TGCTC

我想让它看起来像这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>SEQUENCE_1
AGCNGTNANTGCTG
>SEQUENCE_2
AGGNGTNANTGCTC

但不是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>SENUENCE_1
AGCNGTNANTGCTG
>SENUENCE_2
AGGNGTNANTGCTC
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-25 02:04:29

您的问题很容易回答,但在处理通用fasta文件时不会对您有所帮助。Fasta文件有一个序列头,后面有一个或多个行,可以连在一起来表示序列。Fasta文件格式大致遵循以下规则:

  • 以字符(>)开头的描述行(平移)或标头/标识符行给出了序列的名称和/或唯一标识符,并且还可以包含附加信息。
  • 在描述行后面是标准的一个字母字符串中的实际序列本身。除有效字符以外的任何其他内容都将被忽略(包括空格、制表符、星号等)。
  • 序列可以跨越多条线。
  • 多序列FASTA格式将通过将几个序列FASTA文件连接在一个公共文件中来获得,通常是在两个后续序列之间留一条空行。

要回答OP的问题,如果您只想处理每一行,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '!(NR%2){gsub(/[^CTAG]/, "N")}1' file.fasta

但是,在下列任何情况下,此方法都将失败:

  • 具有多行序列的fasta文件
  • 具有可能在后续序列之间空行的多fasta文件

一个更好的方法是排除标题行并处理所有其他行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '!/^>/{gsub(/[^CTAG]/, "N")}1' file.fasta
票数 3
EN

Stack Overflow用户

发布于 2019-03-24 13:20:19

由于@kvantour对fasta文件的解释,这里有另一个sed解决方案比以前的解决方案更适合您的任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sed '/^>/! s/[^ACTG]/N/g' file.fasta
  • 如果这一行不以/^>/!**:**开头,则/^>/!**:**执行以下操作,
  • s/[^ACTG]/N/g**:**将除ACTG以外的所有字符替换为N
票数 2
EN

Stack Overflow用户

发布于 2019-03-24 15:56:05

这里有一个使用awk的解决方案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk 'NR%2 ==0{gsub(/[^CTAG]/, "N")}1' file

结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SEQUENCE_1
AGCNGTNANTGCTG
SEQUENCE_2
AGGNGTNANTGCTC

如OP所希望的那样,我只是在寻找每一个偶数行来应用更改

NR/2 == 0

NR是从file读取的记录数(此处的行)

gsub(/[^CTAG]/, "N")用所有不是C、T、A、G的字符替换

[^CTAG] ^是否定的

awk采用expression action格式

在这里,expressionNR/2==0,操作是用N替换为不是CTAGgsub

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55328659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文