जवाबों:
आप उसके लिए उपयोग कर सकते हैं awk
।
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
>
फ़ाइल में सभी आउटपुट प्रिंट करता है, मौजूदा फ़ाइलों को अधिलेखित करता है। इसका मूल्यांकन इस तरह से नहीं किया जाता है कि यह किसी भी नई लाइनों के परिणामस्वरूप पुराने आउटपुट को एक ही उदाहरण से अधिलेखित कर देगा awk
। यही है, अगर कई मैच हैं, तो फ़ाइल "मैच" में प्रत्येक मैच अलग होगा OFS
। मौजूदा फ़ाइलों के उपचार के बीच अंतर >
और >>
मौजूद है।
यहाँ एक sed
उदाहरण है:
नोट: सेड का w
कमांड स्क्रिप्ट को चलाने पर हर बार एक मौजूदा फ़ाइल को अधिलेखित करेगा, लेकिन केवल अगर वह विशेष रूप से लिखने की कमांड चालू हो; इसलिएrm
rm -f file-{yes,not}
sed -ne '/pattern/bY; w file-not' -e 'b; :Y; w file-yes' file
sed -n '/PATTERN/p;//! w file-not' infile >file-yes
आप फ़ाइलों को awk में जोड़ सकते हैं:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
या इससे कम:
awk '{print >>(/pattern/?"matched":"unmatched")}'
awk
लेकिन यह किस बिंदु पर मूल्यांकन करता है>
? यदि यह सशर्त लागू होने पर हर बार मूल्यांकन किया जाता है, तो आप दो एक-लाइन फ़ाइलों के साथ हवा देंगे ...