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?

Le chat unfun
la source
stackoverflow.com/questions/6641731/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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
Joseph R.
la source
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