Piping szukanego terminu (nie nazwa pliku) do grep


23

Chcę wybrać z pliku niektóre wiersze zawierające dany numer. Plik, który chcę wyszukać, nazywa się 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

Pierwsza część, przed potokiem, działa - tworzy wyszukiwane hasła, takie jak 8707, 8824 itd. Jednak druga część nie.

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

Zamiast przeszukiwać plik docelowy pod kątem terminów utworzonych przez potok, traktuje wyszukiwane hasła jako plik wejściowy. Dlatego otrzymuję komunikaty o błędach, takie jak:

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

Co muszę zmienić, aby wyszukać w pliku os_clusters/piRNA_clusters.bedterminy utworzone przez potok?


Odpowiedzi:


35

Myślę, że chcesz

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

-fkaże grepuzyskać wzorzec wyszukiwania z pliku i -informuje go, że ten plik jest w rzeczywistości stdin (wyjście potoku w twoim przypadku).

Dzięki komentarzowi @ rici, do grepużytku innego niż GNU

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

Dzięki za wskazówkę, ale właśnie wyprodukowała:grep: -: No such file or directory
The Unfun Cat

8
Jeśli nie używasz gnu grep, spróbuj -f /dev/stdinzamiast-f -
rici

OS X 10.8 vel Mountain Lion
The Unfun Cat

6
Możesz także użyć <()składni bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.