我在第二个字段中有一个带有rsID的大文件。
有些变体采用这种格式:chr1 1-97981343:AT 55886062-AT
使用bash命令,如何替换这些标识符来打印rsID (例如,rs55886062)?
玩具数据集:
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期望的输出:
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发布于 2022-10-17 13:36:26
如果变体格式总是使用:和-构造的,而且如果您不介意调整文件的空格,则可以这样做:
awk 'split($2, a, ":") && a[2]{ split(a[2], b, "-"); $2 = b[1] }{$1 = $1}1' input发布于 2022-10-17 13:42:27
更多的样本将有助于构建regexp模式。这里有一个可能的解决方案:
$ 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\< anchorchr[0-9]+-[0-9]+: match chr,后面是一个或多个数字,后面是-,后面是一个或多个数字,接着是:(rs[0-9]+) capture rs,接着是一个或多个digits-[A-Z]+匹配-,后面是一个或多个大写字符发布于 2022-10-17 15:47:12
遵循sed命令可能会有所帮助
sed -E 's/[^[:blank:]]*(rs[0-9]+)[^[:blank:]]*/\1/' filehttps://stackoverflow.com/questions/74098108
复制相似问题