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.bed
los términos producidos por la tubería?
Respuestas:
Creo que quieres
-f
le dicegrep
que 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
grep
usofuente
grep: -: No such file or directory
-f /dev/stdin
lugar de-f -
<()
sintaxis de bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed