首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除grep不匹配的行

删除grep不匹配的行
EN

Stack Overflow用户
提问于 2018-02-21 07:20:22
回答 1查看 54关注 0票数 1

我有一个文件包含感兴趣的基因名称(24423个基因),另一个文件包含所有基因的长度(41306个基因)。我只想要24424个基因的长度,但是当我使用grep使用grep -wf file1 file2甚至fgrep -Fwf file1 file2时,我会得到一些多余的基因,因为我列表中的一些基因可能只包含意义或反感觉链,而如果引用文件可能同时包含这两种基因,那么这将被反映出来。

我想知道是否有办法从参考文件(file2)中删除所有不匹配的行?

谢谢。

P.S.这个问题也在biostars.org

编辑-

file1

A1BG

A1BG-AS1

TSPAN6

多年期

MYB-AS1

file2

A1BG /A1BG/AC-2941

A1BG-AS1

TSPAN6 / 7923 /7923 7923

MYB-AS1

MYB-AS2

MYB-AS3

desired_output

A1BG /A1BG/AC-2941

A1BG-AS1

TSPAN6 / 7923 /7923 7923

MYB-AS1

但我总是得到MYB-AS2和MYB-AS3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-21 08:05:16

代码语言:javascript
运行
复制
$ cat f1
A1BG
A1BG-AS1
TSPAN6
MYB
MYB-AS1
$ cat f2
A1BG      2941
A1BG-AS1      560
TSPAN6      7923
MYB-AS1      362
MYB-AS2      713
MYB-AS3      396

$ grep -Fwf f1 f2
A1BG      2941
A1BG-AS1      560
TSPAN6      7923
MYB-AS1      362
MYB-AS2      713
MYB-AS3      396

grep在这里帮不了什么忙,因为MYB会将MYB--匹配为word边界

使用awk代替

代码语言:javascript
运行
复制
$ awk 'NR==FNR{a[$1]; next} $1 in a' f1 f2
A1BG      2941
A1BG-AS1      560
TSPAN6      7923
MYB-AS1      362
  • NR==FNR{a[$1]; next}以第一个文件中的第一个字段作为键构建一个数组。
  • 如果第一个字段是数组中的键,则从第二个文件中打印$1 in a行。整个字段必须匹配
  • 有关这种类型的两种文件处理的更多示例/说明,请参见http://backreference.org/2010/02/10/idiomatic-awk/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48900160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档