ส่งคำค้นหา (ไม่ใช่ชื่อไฟล์) ไปที่ grep


23

ฉันต้องการที่จะเลือกสายบางอย่างที่มีจำนวนที่กำหนดจากไฟล์ 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

ส่วนแรกก่อนไปป์ไลน์มันจะสร้างคำที่ต้องการค้นหาเช่น 8707, 8824 เป็นต้นอย่างไรก็ตามส่วนหลังไม่มี

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

แทนที่จะค้นหาไฟล์เป้าหมายสำหรับคำที่สร้างโดยไพพ์มันจะพิจารณาคำค้นหาเป็นไฟล์อินพุต ดังนั้นฉันได้รับข้อความผิดพลาดเช่น:

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

ฉันต้องเปลี่ยนอะไรเพื่อค้นหาไฟล์os_clusters/piRNA_clusters.bedสำหรับคำที่สร้างโดยไพพ์


คำตอบ:


35

ฉันคิดว่าคุณต้องการ

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

-fบอกgrepให้ได้รับรูปแบบการค้นหาจากไฟล์และ-บอกว่าไฟล์นี้เป็น stdin (เอาต์พุตของไพพ์ในกรณีของคุณ)

ขอบคุณที่ความคิดเห็นของ @ rici สำหรับผู้ที่ไม่ได้grepใช้GNU

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

ขอบคุณสำหรับเคล็ดลับ แต่มันเพิ่งเกิดขึ้น:grep: -: No such file or directory
แมวเหม็น

8
หากคุณไม่ได้ใช้ gnu grep ลอง-f /dev/stdinแทน-f -
rici

OS X 10.8 aka Mountain Lion
แมว Unfun

6
คุณยังสามารถใช้<()ไวยากรณ์ของ bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.