Thuật ngữ tìm kiếm đường ống (không phải tên tệp) đến grep


23

Tôi muốn chọn ra một số dòng nhất định có chứa một số nhất định từ một tập tin. Các tập tin tôi muốn tìm kiếm được gọi là 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

Phần đầu tiên, trước đường ống, hoạt động - nó tạo ra các thuật ngữ để tìm kiếm, chẳng hạn như 8707, 8824, v.v. Tuy nhiên, phần sau thì không.

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

Thay vì tìm kiếm tệp mục tiêu cho các thuật ngữ do đường ống tạo ra, nó coi các thuật ngữ tìm kiếm là tệp đầu vào. Do đó, tôi nhận được thông báo lỗi như:

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

Tôi cần thay đổi gì để tìm kiếm tệp os_clusters/piRNA_clusters.bedcho các thuật ngữ do đường ống tạo ra?


Câu trả lời:


35

Tôi nghĩ bạn muốn

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

-fnói grepđể có được mẫu tìm kiếm của nó từ một tệp và -nói với nó rằng tệp này thực sự là stdin (đầu ra của ống trong trường hợp của bạn).

Cảm ơn bình luận của @ rici, vì đã grepsử dụng non-GNU

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

Cảm ơn vì tiền boa, nhưng nó vừa được sản xuất:grep: -: No such file or directory
The Unun Cat

8
Nếu bạn không sử dụng gnu grep, hãy thử -f /dev/stdinthay vì-f -
rici

OS X 10.8 aka Sư tử núi
Con mèo bất kham

6
Bạn cũng có thể sử dụng <()cú pháp của bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.