将搜索字词(而非文件名)管道传输到grep


23

我想从文件中挑选出包含给定数字的某些行。我要搜索的文件称为os_clusters/piRNA_clusters.bed

awk '{if (a[$0]++ == 0) {split($0,b,"."); ;split(b[1],c,"r"); print c[3]}};' test_non_enriched | xargs grep {} os_clusters/piRNA_clusters.bed

第一部分在管道之前起作用,它产生要搜索的术语,例如8707、8824等。但是,后一部分没有。

awk '' ... | xargs grep {} os_clusters/piRNA_clusters.bed

它没有在目标文件中搜索管道产生的术语,而是将搜索术语视为输入文件。因此,我收到如下错误消息:

grep: 8707: No such file or directory
grep: 8824: No such file or directory

我需要更改什么以在文件中搜索os_clusters/piRNA_clusters.bed管道产生的术语?


Answers:


35

我想你要

... | grep -f - os_clusters/piRNA_clusters.bed

-f告诉grep从文件中获取其搜索模式,并-告诉该文件实际上是stdin(在您的情况下为管道的输出)。

感谢@rici的评论,供非GNU grep使用

... | grep -f /dev/stdin os_clusters/piRNA_clusters.bed

感谢您的提示,但它产生了:grep: -: No such file or directory
Unfun Cat,2013年

8
如果你不使用的GNU grep尝试-f /dev/stdin代替-f -
罗杰斯国际商品指数

OS X 10.8 aka Mountain Lion
Unfun Cat,2013年

6
您还可以使用bash的<()语法:grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.