bash - 使用 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
解决方案
假设这是一个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 列,创建一个数组并在第二个文件中匹配它们。
推荐阅读
- sql-server - 如何在组(SQL)中找到具有最小值和最大值的记录?
- pyqt5 - 如何在pyqt5中分离python生成的ui和我们的应用程序逻辑?
- python - 如何检查使用 pytest 调用警告的变量的精确值?
- python - 根据列值仅从 DataFrame 中获取列
- discord.py - 使用命令抓取用户的消息
- python - 如何使用 FastAPI 访问路由器功能中的请求对象?
- python - mambaforge,pycharm 解释器中的 conda 可执行路径为空(Linux mint 20)
- javascript - 是否可以使用弹出菜单在本机反应中更改顶部“标题”事物的宽度?
- bash - Mac OS 终端脚本文件变量 (.command)
- c++ - MSVC++ 2019 中的内存分配