将搜索项(不是文件名)通过管道传送到 grep

将搜索项(不是文件名)通过管道传送到 grep

我想从文件中挑选出包含给定数字的某些行。我要搜索的文件名为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管道生成的术语?

答案1

我想你想要

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

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

感谢@rici 的评论,用于非 GNUgrep使用

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

相关内容