2012-07-06 17 views
8

मैं एक बहुत बड़ी टेक्स्ट फ़ाइल पर निम्न आदेश चलाने की कोशिश कर रहा हूं। हालांकि, यह बहुत धीमा हैएक बड़ी फ़ाइल पर पहला 1 चुनें

((cat largefile.txt | select -first 1).split(",")).count() 

शक्तिशक्ति में एक वैकल्पिक तेज़ तरीका है? ऐसा लगता है कि आदेश पूरी फाइल को स्कैन करेगा चाहे कोई फर्क नहीं पड़ता।

उत्तर

12

केवल एक पाठ फ़ाइल में लाइनों के पहले एक्स संख्या प्राप्त करने के लिए, का उपयोग करें - कुल गणना पैरामीटर:

((Get-Content largefile.txt -totalcount 1).split(",")).count 
+0

यह विधि पहली पंक्ति लेने से पहले, पूरी फ़ाइल को स्मृति में पहले लोड करती है। – Ten98

9

इससे भी बदतर है - यह पूरी फ़ाइल और लोड करेगा इसे स्ट्रिंग सरणी में बदल देगा।

सिर्फ पहली पंक्ति लोड करने के लिए देशी नेट पुस्तकालयों का उपयोग करें:

$reader = [System.IO.File]::OpenText("largefile.txt") 
$line = $reader.ReadLine() 
$reader.Close() 

(How to process a file in Powershell line-by-line as a stream से उधार)

+0

आखिरी पंक्तियों के बारे में क्या है या क्या आपको इसके माध्यम से सभी तरह से इंतजार करना है? – Coops

+0

यह विधि केवल पहली पंक्ति को मेमोरी में लोड करती है, जिससे इसे बड़ी फ़ाइलों पर गेट-कंटेंट से कई गुना तेज बना दिया जाता है। – Ten98

संबंधित मुद्दे