Término de búsqueda de tubería (no nombre de archivo) a grep


23

Quiero seleccionar ciertas líneas que contienen un número dado de un archivo. El archivo que quiero buscar se llama 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

La primera parte, antes de la tubería, funciona: produce los términos a buscar, como 8707, 8824, etc. Sin embargo, la última parte no.

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

En lugar de buscar en el archivo de destino los términos producidos por la tubería, considera los términos de búsqueda como el archivo de entrada. Por lo tanto, recibo mensajes de error como:

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

¿Qué necesito cambiar para buscar en el archivo os_clusters/piRNA_clusters.bedlos términos producidos por la tubería?


Respuestas:


35

Creo que quieres

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

-fle dice grepque obtenga su patrón de búsqueda de un archivo y -le dice que este archivo es en realidad stdin (la salida de la tubería en su caso).

Gracias al comentario de @ RICI, para los no-GNU grepuso

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

Gracias por el consejo, pero acaba de producir:grep: -: No such file or directory
The Unfun Cat

8
Si no estás usando gnu grep, prueba en -f /dev/stdinlugar de-f -
rici

OS X 10.8 alias Mountain Lion
The Unfun Cat

66
También puede usar la <()sintaxis de bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.