我有一个文件,每行写的都是这样的:
m.187 g.187 ORF g.187 m.187 type:internal len:115 (+) Ph1000_1/1_1.000_345:1-348(+) m.189 g.189 ORF g.189 m.189 type:internal len:125 (+) Ph1007_1/1_1.000_376:1-378(+) m.104 g.104 ORF g.104 m.104 type:internal len:354 (+) Pu1004_1/1_1.000_1062:1-1065(+) m.147 g.147 ORF g.147 m.147 type:internal len:150 (+) Te1003_1/1_1.000_451:1-453(+)
它表示基因ID列表,但我想简化这些行中的每一行:例如,如果我采用第一个ID,
m.187 g.187 ORF g.187 m.187 type:internal len:115 (+) Ph1000_1/1_1.000_345:1-348(+)
用' m.187 g.187 ORF g.187 m.187 type:internal len:115 (+)
'
>
替换零件:1-348(+)
为了保持这一点:
>Ph1000_1/1_1.000_345
每一行都会变成:
>Ph1000_1/1_1.000_345 >Ph1007_1/1_1.000_376 >Pu1004_1/1_1.000_1062 >Te1003_1/1_1.000_451
这很复杂;我写的正则表达式,现在,删除我想要的更多东西,只保留最后一个ID,正确写入:
sed -e 's/m.*[ ]([+])[ ]/>/g' -e 's/[:].*$//' $1
给出
>Ph1000_1/1_1.000_345
所以我觉得我已经接近找到了答案,但我有点被困在这里......有什么帮助吗?
答案 0 :(得分:0)
sed 方法:
sed -E 's/m\.[0-9]{3}[^()]+\(\+\)\s*/>/g; s/:\S+//g' file
输出:
>Ph1000_1/1_1.000_345 >Ph1007_1/1_1.000_376 >Pu1004_1/1_1.000_1062 >Te1003_1/1_1.000_451
-E
- 启用扩展正则表达式
s/m\.[0-9]{3}[^()]+\(\+\)\s*/>/g
- 替换所有以m.<3 digits>
开头并以(+)
>
开头的
答案 1 :(得分:0)
试试这个:
sed -e 's/(m.*?\(\+\))/>/g; s/:[\d\W]+//g' file