首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分字符串并切换输出列

拆分字符串并切换输出列
EN

Stack Overflow用户
提问于 2015-09-22 20:19:56
回答 4查看 61关注 0票数 1

我的输入是:

代码语言:javascript
复制
TGCCTCAGTTCAGCAGGAACAGT_1       __not_aligned
CGCCCGATCTCGTCTGATCTCG_0        __too_low_aQual
TTTTAACGCGGACCAGAAACTA_2        __not_aligned
TACCGTGTAGAACCGAATTTGT_69       mir-10
AGGAAGCCCTGGAGGGGCTGGAGA_0      mir-671

我希望输出为:

代码语言:javascript
复制
   __not_aligned    1
   __too_low_aQual  0
   __not_aligned  2
   mir-10    69
   mir-671          0

我试图使用cut函数,但我不确定如何切换列以及如何获得特定的输出?

代码语言:javascript
复制
cut -d _ -f 
EN

回答 4

Stack Overflow用户

发布于 2015-09-22 20:34:48

你可以用gawk尝试一下:

代码语言:javascript
复制
awk '{match($1,"[0-9]+",a)}{print $2,a[0]}' file

输出:

代码语言:javascript
复制
__not_aligned 1
__too_low_aQual 0
__not_aligned 2
mir-10 69
mir-671 0

或者使用POSIX更好(感谢Ed Morton):

代码语言:javascript
复制
 awk --posix '{match($1,/[0-9]+/);print $2,substr($0,RSTART,RLENGTH)}' file
票数 2
EN

Stack Overflow用户

发布于 2015-09-22 21:12:49

代码语言:javascript
复制
$ awk '{sub(/[^_]+_/,""); print $2, $1}' file
__not_aligned 1
__too_low_aQual 0
__not_aligned 2
mir-10 69
mir-671 0

代码语言:javascript
复制
$ sed -r 's/[^_]+_([0-9]+)[[:space:]]+(.*)/\2 \1/' file
__not_aligned 1
__too_low_aQual 0
__not_aligned 2
mir-10 69
mir-671 0
票数 1
EN

Stack Overflow用户

发布于 2015-09-23 00:46:33

如果Perl是一个选项:

代码语言:javascript
复制
perl -lne 'if (/^([ACGT]+)_(\d+)\s+(.*)/){print "$3 $2"}' file

将3个字段捕获到正则表达式中:

^([ACGT]+)以一个或多个ACGT base开头,后跟下划线

(\d+)一个或多个数字,后跟\s+空格

(.*) anything

如果正则表达式匹配,则打印第三个字段和第二个字段

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

https://stackoverflow.com/questions/32716701

复制
相关文章

相似问题

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