Termo de pesquisa de piping (não nome de arquivo) para grep

21

Eu quero escolher certas linhas contendo um determinado número de um arquivo. O arquivo que eu quero pesquisar é chamado 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

A primeira parte, antes do pipe, funciona - produz os termos para pesquisar, como 8707, 8824 etc. No entanto, a última parte não.

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

Em vez de pesquisar o arquivo de destino para os termos produzidos pelo canal, ele considera os termos de pesquisa como o arquivo de entrada. Por isso, recebo mensagens de erro como:

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

O que preciso alterar para pesquisar o arquivo os_clusters/piRNA_clusters.bed dos termos produzidos pelo canal?

    
por The Unfun Cat 04.08.2013 / 08:03

1 resposta

34

Eu acho que você quer

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

-f informa grep para obter seu padrão de pesquisa de um arquivo e - informa que este arquivo é realmente stdin (a saída do canal no seu caso).

Graças ao comentário do @rici, para não-GNU grep use

... | grep -f /dev/stdin os_clusters/piRNA_clusters.bed
    
por 04.08.2013 / 08:15

Tags