Linux 使用sed/awk/grep从.gff文件中提取子字符串
我有一个包含多行的文件,如下所示:Linux 使用sed/awk/grep从.gff文件中提取子字符串,linux,shell,sed,grep,Linux,Shell,Sed,Grep,我有一个包含多行的文件,如下所示: 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_00001 product=hypothetical pr
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_00001 product=hypothetical protein
我想提取ID=PROKKA_uka[whatever number]和'product='之后的所有内容,以获得如下输出:
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_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
如果您希望结果在同一行中,请使用grep+paste
:
grep -oE 'ID=PROKKA_[0-9]+|product=[^;:]+' file | paste -s
您可以使用
grep-oE
:
grep -oE 'ID=PROKKA_[0-9]+|product=[^;:]+' file
如果您希望结果在同一行中,请使用grep+paste
:
grep -oE 'ID=PROKKA_[0-9]+|product=[^;:]+' file | paste -s
太好了!!!我添加了一个|粘贴--以便每行有一个结果(ID+product)。非常感谢。太好了!!!我添加了一个|粘贴--以便每行有一个结果(ID+product)。非常感谢。哎呀,你忘了发代码了。StackOverflow是关于帮助人们修复代码的。它不是一个免费的编码服务。有代码总比没有代码好。即使您不知道如何编写程序,元代码也会演示您认为程序应该如何工作。考虑到您包含的标记,我希望在您的问题中看到shell和sed代码。我投票决定结束这个问题,因为到目前为止没有你的工作,StackOverflow的主题已经偏离了。@ghoti,Updatedops,你忘记发布代码了。StackOverflow是关于帮助人们修复代码的。它不是一个免费的编码服务。有代码总比没有代码好。即使您不知道如何编写程序,元代码也会演示您认为程序应该如何工作。考虑到您包含的标记,我希望在您的问题中看到shell和sed代码。我投票决定结束这个问题,因为到目前为止没有你的工作,StackOverflow的主题已经偏离了。@ghoti gotcha,更新