我有一个看起来像这样的文本文件:
>ID1_ID2 other_stuff
more_other_stuff
>ID3_ID4 other_stuff
more_other_stuff
我想将其更改为:
>ID1_ID2;label=ID1 other_stuff
more_other_stuff
>ID3_ID4;label=ID3 other_stuff
more_other_stuff
也就是说,对于以>
开头的每一行,添加;label=ID
(在特定位置),其中ID
是>
和第一个下划线之间的数字。所有ID都是整数。
我可以在Python中解决这个问题,但是有没有简单的方法可以使用sed
或awk
或其他Unix命令行工具就地执行此操作?
答案 0 :(得分:1)
使用GNU sed,您可以使用:
sed -r 's/^>(([0-9]+)_([0-9]+))( .*)/\1;label=\2\4/' yourfile
如果有效,您可以添加选项-i,bak
。
匹配
>
(^>
)_
分隔:(([0-9]+)_([0-9]+))
\1
\2
和\3
( .*)
)被捕获到\4
答案 1 :(得分:0)
使用GNU sed:
$ sed -r 's/>([^_]+)\S+/&;label=\1/' file
>ID1_ID2;label=ID1 other_stuff
more_other_stuff
>ID3_ID4;label=ID3 other_stuff
more_other_stuff
在您进行测试后添加-i
标记。