पाइपिंग खोज शब्द (फ़ाइल नाम नहीं) 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

-fgrepएक फ़ाइल से अपना खोज पैटर्न प्राप्त करने के लिए कहता है और -यह बताता है कि यह फ़ाइल वास्तव में स्टडिन है (आपके मामले में पाइप का आउटपुट)।

गैर-जीएनयू grepउपयोग के लिए @ रिसी की टिप्पणी के लिए धन्यवाद

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

टिप के लिए धन्यवाद, लेकिन यह सिर्फ निर्मित:grep: -: No such file or directory
— अनफुन कैट

8
यदि आप ग्नू -f /dev/stdin-f -
— ग्रीप

OS X 10.8 उर्फ ​​माउंटेन लायन
— द अनफिन कैट

6
आप बैश के <()वाक्य विन्यास का भी उपयोग कर सकते हैं :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
— rici
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.