首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改名变体列

改名变体列
EN

Stack Overflow用户
提问于 2022-10-17 13:30:02
回答 4查看 46关注 0票数 -1

我在第二个字段中有一个带有rsID的大文件。

有些变体采用这种格式:chr1 1-97981343:AT 55886062-AT

使用bash命令,如何替换这些标识符来打印rsID (例如,rs55886062)?

玩具数据集:

代码语言:javascript
复制
1   rs3918290   110 97915614    A   G
1   chr1-97981343:rs55886062-AT 110 97981343    A   T
1   rs72549303  110 97915622    C   A
1   rs17376848  110 97915624    G   A
1   rs59086055  110 97915746    A   G

期望的输出:

代码语言:javascript
复制
1   rs3918290   110 97915614    A   G
1   rs55886062  110 97981343    A   T
1   rs72549303  110 97915622    C   A
1   rs17376848  110 97915624    G   A
1   rs59086055  110 97915746    A   G
EN

回答 4

Stack Overflow用户

发布于 2022-10-17 13:36:26

如果变体格式总是使用:-构造的,而且如果您不介意调整文件的空格,则可以这样做:

代码语言:javascript
复制
awk 'split($2, a, ":") && a[2]{ split(a[2], b, "-"); $2 = b[1] }{$1 = $1}1' input
票数 2
EN

Stack Overflow用户

发布于 2022-10-17 13:42:27

更多的样本将有助于构建regexp模式。这里有一个可能的解决方案:

代码语言:javascript
复制
$ sed -E 's/\<chr[0-9]+-[0-9]+:(rs[0-9]+)-[A-Z]+/\1/' ip.txt
1   rs3918290   110 97915614    A   G
1   rs55886062 110 97981343    A   T
1   rs72549303  110 97915622    C   A
1   rs17376848  110 97915624    G   A
1   rs59086055  110 97915746    A   G

  • \< anchor
  • chr[0-9]+-[0-9]+: match chr,后面是一个或多个数字,后面是-,后面是一个或多个数字,接着是:
  • (rs[0-9]+) capture rs,接着是一个或多个digits
  • -[A-Z]+匹配-,后面是一个或多个大写字符
票数 2
EN

Stack Overflow用户

发布于 2022-10-17 15:47:12

遵循sed命令可能会有所帮助

代码语言:javascript
复制
sed -E 's/[^[:blank:]]*(rs[0-9]+)[^[:blank:]]*/\1/' file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74098108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档