使用sed/awk/grep从.gff文件中提取子字符串



我有一个包含多行的文件,如下所示:

NODE_1_length   Prodigal:2.6    CDS     11      274     .       +       0       ID=PROKKA_00001;inference=ab initio prediction:Prodigal:2.6;locus_tag=PROKKA_00001;product=hypothetical protein

我想提取ID=PROKKA_[无论什么数字]和"product="之后的所有内容,以获得这样的输出:

ID=PROKKA_00001 product=hypothetical protein

我在使用sed方面不是很熟练,所以我试图调整我在这里和周围找到的一些解决方案,但没有成功。如果解决方案分为两个步骤(一个用于ID,一个用于产品(,那么我可以将这两个结果合并到一个文件中。

如果您能对所使用的正则表达式进行解释,我将不胜感激。

到目前为止,我试图将问题一分为二(从ID开始(,并尝试:

grep -o 'ID=PROKKA_[0-9]{1,5}*'
sed 's/^ID=PROKKA[0-9]*;//g/
grep -Po 'ID="K[^"]*'

当然,它们都不起作用。谢谢你的帮助!

您可以使用grep -oE:

grep -oE 'ID=PROKKA_[0-9]+|product=[^;:]+' file

ID=PROKKA_00001
product=hypothetical protein

如果您想在同一行中得到结果,请使用grep + paste:

grep -oE 'ID=PROKKA_[0-9]+|product=[^;:]+' file | paste -s

最新更新