मैं उपरोक्त अन्य उत्तर की कोशिश की है, लेकिन वे सभ्य समाधान से बहुत दूर हैं, जब बड़ी फ़ाइलों के साथ काम कर - विशेष रूप से एक पंक्ति के आकार में उपलब्ध रैम के ~ 1/4 से अधिक पर कब्जा होता है।
दोनों बाश और अजीब पूरी लाइन को फिसलते हैं, भले ही इस समस्या के लिए इसकी आवश्यकता नहीं है। लाइन बहुत लंबी होने के बाद बैश त्रुटि हो जाएगी, भले ही आपके पास पर्याप्त स्मृति हो।
मैंने एक बेहद सरल, काफी अनौपचारिक पायथन लिपि लागू की है कि जब बड़ी फ़ाइलों (~ 4 जीबी प्रति पंक्ति) के साथ परीक्षण किया जाता है, तो यह स्लर्प नहीं होता है, और यह उन लोगों की तुलना में कहीं बेहतर समाधान है।
यदि यह उत्पादन के लिए समय महत्वपूर्ण कोड है, तो आप सी में विचारों को फिर से लिख सकते हैं या पढ़ने के कॉल पर बेहतर अनुकूलन कर सकते हैं (एक समय में केवल एक बाइट पढ़ने के बजाय), परीक्षण के बाद यह वास्तव में एक बाधा है।
कोड मानता है कि न्यूलाइन एक लाइनफीड चरित्र है, जो यूनिक्स के लिए एक अच्छी धारणा है, लेकिन मैक ओएस/विंडोज पर वाईएमएमवी है। सुनिश्चित करें कि फाइल लाइनफीड के साथ समाप्त होती है ताकि यह सुनिश्चित किया जा सके कि अंतिम पंक्ति वर्ण गणना को अनदेखा नहीं किया गया है।
from sys import stdin, exit
counter = 0
while True:
byte = stdin.buffer.read(1)
counter += 1
if not byte:
exit()
if byte == b'\x0a':
print(counter-1)
counter = 0
सॉफ्टवेयर विकास का पहला नियम: "नहीं" का अर्थ "नहीं" है। "Num" या "संख्या" का प्रयोग करें। –
[उद्धरण वांछित]। – uprego