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.bed
les termes produits par le tuyau?
Réponses:
Je pense que tu veux
-f
indiquegrep
d'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
grep
utilisationla source
grep: -: No such file or directory
-f /dev/stdin
place de-f -
<()
syntaxe de bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed