में बड़ी फ़ाइल से एक विशिष्ट रेखा को पढ़ना क्या बड़ी फ़ाइल की विशिष्ट पंक्तियों को पढ़ने के लिए स्मृति के बिना लोड करने के लिए कोई तेज़ और मेमोरी प्रभावी तरीका है?पर्ल
मैंने एक पर्ल स्क्रिप्ट लिखी, जो कई कांटे चलाती है और मैं उन्हें फ़ाइल से विशिष्ट लाइनों को पढ़ना चाहता हूं।
पल इम एक बाहरी कमांड के प्रयोग पर:
sub getFileLine {
my ($filePath, $lineWanted) = @_;
$SIG{PIPE} = '_IGNORE_';
open(my $fh, '-|:utf8', "tail -q -n +$lineWanted \"$filePath\" | head -n 1");
my $line = <$fh>;
close $fh;
chomp($line);
return $line;
}
इसका तेजी से और यह काम करता है - लेकिन शायद वहाँ एक अधिक "पर्ल-ish" जिस तरह से, तेजी से और स्मृति यह एक के रूप में कुशल के रूप में?
जैसा कि आप जानते हैं, पर्ल में एक कांटा प्रक्रिया बनाना मुख्य प्रक्रिया मेमोरी को डुप्लिकेट करता है - इसलिए यदि मुख्य प्रक्रिया 10 एमबी का उपयोग कर रही है, तो कांटा कम से कम इतना उपयोग करेगा।
मेरा लक्ष्य फोर्क प्रक्रिया को रखना है (इसलिए फोर्क्स चलने तक भी मुख्य प्रक्रिया) स्मृति जितनी कम हो सके उतनी कम उपयोग करें। Thats क्यों मैं पूरी फ़ाइल को स्मृति में लोड नहीं करना चाहता।
बीटीडब्ल्यू, यह 'इग्नोर' है, न कि '_IGNORE_'। – ikegami