首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从awk中的列中提取文本

如何从awk中的列中提取文本
EN

Stack Overflow用户
提问于 2017-02-24 14:48:41
回答 5查看 1.2K关注 0票数 1

我有这样的数据:

代码语言:javascript
复制
COSM3755563_(COSMIC),_COSM3755562_(COSMIC),_rs16941_(Gene_file)
COSM148277_(COSMIC),_COSM3755561_(COSMIC),_rs16942_(Gene_file)
rs1060915_(Gene_file;_1000Genomes)
COSM3755560_(COSMIC),_rs1799966_(Gene_file)
rs206075_(Gene_file;_1000Genomes)

我需要这样的输出:

代码语言:javascript
复制
rs16941
rs16942
rs1060915
rs1799966
rs206075

我只需要从这个专栏中提取rs_number。问题是,rs_number总是处于不同的位置。

我的解决办法是:

代码语言:javascript
复制
awk '{split ($1,arr1,"_"); print arr1[1)}' infile

在改变了我的rs_number的位置之前,这一切都很好。

感谢任何在awk方面的帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-02-24 14:52:37

您可以使用grep来匹配线条,并且只打印匹配项,

代码语言:javascript
复制
$ grep  -o "rs[[:digit:]]*" file
rs16941
rs16942
rs1060915
rs1799966
rs206075

-o,-只匹配 只打印线条的匹配部分。

这也可以使用match函数在awk中完成。

代码语言:javascript
复制
$ awk  '{match($0, "rs[[:digit:]]*", arr); print arr[0]}' file
rs16941
rs16942
rs1060915
rs1799966
rs206075
票数 4
EN

Stack Overflow用户

发布于 2017-02-24 14:52:56

为此,我将使用sed

代码语言:javascript
复制
sed 's/.*\(rs[[:digit:]]\{1,\}\).*/\1/' file

搜索:

代码语言:javascript
复制
.*             - any character, zero or more times
\(             - begin of capturing group
rs             - the literal 'rs'
[[:digit:]]    - a digit ...
\{1,\}         - ... one or more times (can be \+ if you use GNU sed)
\)             - end of capturing group
.*             - any character, zero or more times

取代:

代码语言:javascript
复制
\1             - Content of capturing group 1
票数 4
EN

Stack Overflow用户

发布于 2017-02-24 14:56:01

使用awk:

代码语言:javascript
复制
awk 'match($0, /rs[0-9]+/) { print substr( $0, RSTART, RLENGTH )}' data

这不应该需要gawk,而且即使在旧的计算机上也应该工作。

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

https://stackoverflow.com/questions/42441557

复制
相关文章

相似问题

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