我有以下数据:
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)
我需要一个输出:
rs16941
rs16942
rs1060915
rs1799966
rs206075
我只需从此列中提取rs_number即可。问题是,rs_number总是位于不同的位置。
我的解决方案是:
awk '{split ($1,arr1,"_"); print arr1[1)}' infile
直到我的rs_number改变了位置,这个工作非常好。
感谢awk中的任何帮助。
答案 0 :(得分:4)
您可以使用grep
来匹配线条,只打印匹配项
$ grep -o "rs[[:digit:]]*" file
rs16941
rs16942
rs1060915
rs1799966
rs206075
-o, - 仅匹配
仅打印行的匹配部分。
也可以使用match
awk
功能完成此操作
$ awk '{match($0, "rs[[:digit:]]*", arr); print arr[0]}' file
rs16941
rs16942
rs1060915
rs1799966
rs206075
答案 1 :(得分:4)
我会使用sed
:
sed 's/.*\(rs[[:digit:]]\{1,\}\).*/\1/' file
搜索:
.* - 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
替换:
\1 - Content of capturing group 1
答案 2 :(得分:2)
使用awk:
awk 'match($0, /rs[0-9]+/) { print substr( $0, RSTART, RLENGTH )}' data
这不应该是gawk
,甚至可以在较旧的计算机上使用
答案 3 :(得分:1)
另一个基于awk
的解决方案,它使用下划线字符_
作为字段分隔符,并打印以rs
开头的字段:
awk -F'_' '{for(i=1;i<=NF;i++){if($i ~/^rs/){print $i}}}' file
rs16941
rs16942
rs1060915
rs1799966
rs206075
答案 4 :(得分:0)
你也可以尝试这种方法
sed 's/.*\(rs[^\_]\+\).*/\1/' fileName
<强>输出:强>
rs16941
rs16942
rs1060915
rs1799966
rs206075