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?

El gato no divertido
fuente
stackoverflow.com/questions/6641731/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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
Joseph R.
fuente
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