首页 > 解决方案 > 使用 grep 保留重复的行

问题描述

我正在使用 grep 在 file1 中搜索 file2 中的模式,这个 file2 有一些重复的行,我只能得到它们一次。如何使用 grep 保留重复的行?

文件1.txt

2L  FlyBase mRNA    11009821    11011086    .   -   .   ID=transcript:FBtr0080162;Parent=gene:FBgn0032329;Name=Art8-RA;biotype=protein_coding;transcript_id=FBtr0080162

2L  FlyBase ncRNA   11011162    11012135    .   -   .   ID=transcript:FBtr0346761;Parent=gene:FBgn0267425;Name=asRNA:CR45778-RA;biotype=ncRNA;transcript_id=FBtr0346761

2L  FlyBase mRNA    11011312    11012135    .   +   .   ID=transcript:FBtr0080156;Parent=gene:FBgn0250837;Name=dUTPase-RB;biotype=protein_coding;transcript_id=FBtr0080156

2L  FlyBase mRNA    11011312    11012135    .   +   .   ID=transcript:FBtr0331195;Parent=gene:FBgn0250837;Name=dUTPase-RC;biotype=protein_coding;transcript_id=FBtr0331195

2L  FlyBase mRNA    11011312    11012135    .   +   .   ID=transcript:FBtr0080157;Parent=gene:FBgn0250837;Name=dUTPase-RA;biotype=protein_coding;transcript_id=FBtr0080157

2L  FlyBase mRNA    67043   71081   .   +   .   ID=transcript:FBtr0306536;Parent=gene:FBgn0067779;Name=dbr-RC;biotype=protein_coding;transcript_id=FBtr0306536

2L  FlyBase mRNA    67043   71390   .   +   .   ID=transcript:FBtr0078100;Parent=gene:FBgn0067779;Name=dbr-RB;biotype=protein_coding;transcript_id=FBtr0078100

文件2.txt

FBtr0306536

FBtr0078100

FBtr0306536

FBtr0078100

我的代码: grep 'ID=transcript:' file1.txt | grep -w -f file2.txt

2L  FlyBase mRNA    67043   71081   .   +   .   ID=transcript:FBtr0306536;Parent=gene:FBgn0067779;Name=dbr-RC;biotype=protein_coding;transcript_id=FBtr0306536

2L  FlyBase mRNA    67043   71390   .   +   .   ID=transcript:FBtr0078100;Parent=gene:FBgn0067779;Name=dbr-RB;biotype=protein_coding;transcript_id=FBtr0078100

--->但是,我希望我能得到这样的结果:

2L  FlyBase mRNA    67043   71081   .   +   .   ID=transcript:FBtr0306536;Parent=gene:FBgn0067779;Name=dbr-RC;biotype=protein_coding;transcript_id=FBtr0306536

2L  FlyBase mRNA    67043   71390   .   +   .   ID=transcript:FBtr0078100;Parent=gene:FBgn0067779;Name=dbr-RB;biotype=protein_coding;transcript_id=FBtr0078100

2L  FlyBase mRNA    67043   71081   .   +   .   ID=transcript:FBtr0306536;Parent=gene:FBgn0067779;Name=dbr-RC;biotype=protein_coding;transcript_id=FBtr0306536

2L  FlyBase mRNA    67043   71390   .   +   .   ID=transcript:FBtr0078100;Parent=gene:FBgn0067779;Name=dbr-RB;biotype=protein_coding;transcript_id=FBtr0078100

标签: bashawkgrep

解决方案


假设这是一个bash外壳,如果awk可以选择其他工具,它可能会提供更简单的解决方案

$ awk -F"[:;]" 'NR==FNR{array[$2]=$0; next} {print array[$0]}' file1 file2
2L FlyBase mRNA 67043 71081 . + . ID=transcript:FBtr0306536;Parent=gene:FBgn0067779;Name=dbr-RC;biotype=protein_coding;transcript_id=FBtr0306536

2L FlyBase mRNA 67043 71390 . + . ID=transcript:FBtr0078100;Parent=gene:FBgn0067779;Name=dbr-RB;biotype=protein_coding;transcript_id=FBtr0078100

2L FlyBase mRNA 67043 71081 . + . ID=transcript:FBtr0306536;Parent=gene:FBgn0067779;Name=dbr-RC;biotype=protein_coding;transcript_id=FBtr0306536

2L FlyBase mRNA 67043 71390 . + . ID=transcript:FBtr0078100;Parent=gene:FBgn0067779;Name=dbr-RB;biotype=protein_coding;transcript_id=FBtr0078100

通过使用两个分隔符: and ;,您可以将基因 ID 隔离到第 2 列,创建一个数组并在第二个文件中匹配它们。


推荐阅读