用shell脚本,把id等号后面的内容提取出来,还有id后面的一块内容也提取出来

数据结构长这样的,id后面的一块内容如name=LOS..,等号后面的内容,或者是exon_1
不知道叙述清楚了没有,总而言之,想要把ID=【LOC_Os01g01010】,Name=【LOC_Os01g01010】/【exon_1】,括号里面的内容提取出来,有的分割符是:,有的分隔符是;顺便把前面的内容也打印出来

可以用正则:
(?:\S+\s+){8}ID=(?P<ID>[^;]+);(?:Name=(?P<NAME>[^;]+);)?Parent=(?P<PARENT>[^;]+);

以上是Perl的正则匹配,变量放在了 ID、NAME、PARENT中,第二个NAME可能不存在追问

谢谢你,问题已经解决了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-26
发文本的,能做测试追问

Chr1 MSU_r7 mRNA 29 108 . + . ID=L_2;Name=LOC_;Parent=LOC1

Chr1 MSU_r7 exon 2903 3268 . + . ID=L_1:exon_1;Parent=LOCOs

追答

[root@Goun 桌面]# awk -F "[=;]" 'NF==4{print $2};NF==6{print $2,$4}' test.txt
L_2 LOC_
L_1:exon_1
你说的前面的内容,是ID前面的内容么?

追问

谢谢你,不过打印出来的还有一个冒号,我昨天想办法解决了

本回答被提问者采纳
第2个回答  2015-07-27
叙述不清,举个例子看看,到底要提取什么数据。追问

已经解决了,谢谢

相似回答