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.bed
terminy utworzone przez potok?
Odpowiedzi:
Myślę, że chcesz
-f
każegrep
uzyskać 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
grep
użytku innego niż GNUźródło
grep: -: No such file or directory
-f /dev/stdin
zamiast-f -
<()
składni bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed