Piping istilah pencarian (bukan nama file) ke grep

23

Saya ingin memilih baris tertentu yang berisi nomor dari file. File yang ingin saya cari dipanggil 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

Bagian pertama, sebelum pipa bekerja, itu menghasilkan istilah untuk mencari, seperti 8707, 8824 dll. Namun, bagian terakhir tidak.

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

Alih-alih mencari file target untuk istilah yang diproduksi oleh pipa, itu menganggap istilah pencarian sebagai file input. Karenanya, saya mendapatkan pesan kesalahan seperti:

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

Apa yang harus saya ubah untuk mencari file os_clusters/piRNA_clusters.beduntuk istilah yang dihasilkan oleh pipa?

Kucing Unfun
sumber
stackoverflow.com/questions/6641731/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

35

Saya pikir kamu mau

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

-fmemberitahu grepuntuk mendapatkan pola pencariannya dari file dan -mengatakan bahwa file ini sebenarnya stdin (output dari pipa dalam kasus Anda).

Berkat komentar @ Rici, karena non GNU- greppenggunaan

... | grep -f /dev/stdin os_clusters/piRNA_clusters.bed
Joseph R.
sumber
Terima kasih atas tipnya, tetapi baru saja diproduksi:grep: -: No such file or directory
The Unfun Cat
8
Jika Anda tidak menggunakan gnu grep, coba -f /dev/stdinbukannya-f -
rici
OS X 10.8 alias Mountain Lion
The Unfun Cat
6
Anda juga dapat menggunakan <()sintaks bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici