मैं PowerShell में लाइन द्वारा एक फ़ाइल लाइन पढ़ना चाहता हूं। विशेष रूप से, मैं फ़ाइल के माध्यम से लूप करना चाहता हूं, प्रत्येक पंक्ति को लूप में एक चर में संग्रहीत करता हूं, और लाइन पर कुछ प्रसंस्करण करता हूं।
मैं बैश के बराबर जानता हूं:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
PowerShell लूप पर अधिक प्रलेखन नहीं।
process
ब्लॉक को निर्दिष्ट नहीं करता है , और पाइप लाइन में प्रति पंक्ति एक अन्य ऑब्जेक्ट को बाहर निकालता है, तो वह फ़ंक्शन समस्या है। पूरी सामग्री को मेमोरी में लोड करने में कोई समस्या नहीं है Get-Content
।
foreach($line in Get-Content .\file.txt)
यह पूरी फ़ाइल को मेमोरी में लोड करेगा, इससे पहले कि यह चलना शुरू कर दे। यदि आप मुझ पर विश्वास नहीं करते हैं, तो 1GB लॉग फ़ाइल प्राप्त करें और इसे आज़माएँ।
Get-Content .\file.txt | ForEach-Object -Process {}
पाइप लाइन से अवगत है, और पूरी फ़ाइल को मेमोरी में लोड नहीं करेगा। डिफ़ॉल्ट रूप से गेट-कंटेंट पाइप लाइन के माध्यम से एक बार में एक लाइन से गुजरेगा।
Get-Content
एक बार में पूरी फ़ाइल को मेमोरी में लोड करता है, जो बड़ी फ़ाइलों पर विफल या फ्रीज हो जाएगा।