Transfert du terme de recherche (pas du nom de fichier) vers grep


23

Je veux sélectionner certaines lignes contenant un numéro donné dans un fichier. Le fichier que je souhaite rechercher est appelé 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 première partie, avant le tuyau, fonctionne - elle produit les termes à rechercher, tels que 8707, 8824 etc. Cependant, la dernière partie ne fonctionne pas.

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

Au lieu de rechercher dans le fichier cible les termes produits par le canal, il considère les termes de recherche comme le fichier d'entrée. Par conséquent, je reçois des messages d'erreur comme:

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

Que dois-je changer pour rechercher dans le fichier os_clusters/piRNA_clusters.bedles termes produits par le tuyau?


Réponses:


35

Je pense que tu veux

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

-findique grepd'obtenir son modèle de recherche à partir d'un fichier et lui -indique que ce fichier est en fait stdin (la sortie du tube dans votre cas).

Merci au commentaire de @ RICI, pour non-GNU greputilisation

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

Merci pour l'astuce, mais elle vient de produire:grep: -: No such file or directory
The Unfun Cat

8
Si vous n'utilisez pas gnu grep, essayez à la -f /dev/stdinplace de-f -
rici

OS X 10.8 aka Mountain Lion
The Unfun Cat

6
Vous pouvez également utiliser la <()syntaxe de bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.