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:
Creo que quieres
-fle dicegrepque 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
grepusofuente
grep: -: No such file or directory-f /dev/stdinlugar de-f -<()sintaxis de bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed