Piping termine di ricerca (non nome file) in grep


23

Voglio selezionare alcune righe contenenti un determinato numero da un file. Viene chiamato il file che voglio cercare 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 prima parte, prima della pipe, funziona, produce i termini da cercare, come 8707, 8824 ecc. Tuttavia, quest'ultima parte no.

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

Invece di cercare nel file di destinazione i termini prodotti dalla pipe, considera i termini di ricerca come file di input. Quindi, ricevo messaggi di errore come:

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

Cosa devo modificare per cercare nel file os_clusters/piRNA_clusters.bedi termini prodotti dalla pipe?


Risposte:


35

Penso che tu voglia

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

-fdice grepdi ottenere il suo modello di ricerca da un file e gli -dice che questo file è in realtà stdin (l'output della pipe nel tuo caso).

Grazie a @ di rici commento, per non GNU grepuso

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

Grazie per la punta, ma ha appena prodotto:grep: -: No such file or directory
The Unfun Cat

8
Se non usi gnu grep, prova -f /dev/stdininvece di-f -
rici

OS X 10.8 aka Mountain Lion
The Unfun Cat

6
Puoi anche usare la <()sintassi di bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.