खैर शफ जवाब पर एक टिप्पणी के अनुसार उन्होंने एक मिनट के भीतर 78 000 000 000 लाइनों को हिला दिया।
चुनौती स्वीकार की गई...
पहले मुझे 78.000.000.000 लाइनों की फाइल चाहिए थी:
seq 1 78 | xargs -n 1 -P 16 -I% seq 1 1000 | xargs -n 1 -P 16 -I% echo "" > lines_78000.txt
seq 1 1000 | xargs -n 1 -P 16 -I% cat lines_78000.txt > lines_78000000.txt
seq 1 1000 | xargs -n 1 -P 16 -I% cat lines_78000000.txt > lines_78000000000.txt
यह मुझे 78 बिलियन के नए अंक के साथ एक फाइल देता है ;-)
अब शफ भाग के लिए:
$ time shuf -n 10 lines_78000000000.txt
shuf -n 10 lines_78000000000.txt 2171.20s user 22.17s system 99% cpu 36:35.80 total
अड़चन सीपीयू थी और कई थ्रेड्स का उपयोग नहीं कर रहा था, यह 1 कोर को 100% पर पिन करता था अन्य 15 का उपयोग नहीं किया गया था।
अजगर वह है जो मैं नियमित रूप से उपयोग करता हूं, इसलिए मैं इसे तेजी से बनाने के लिए उपयोग करूंगा:
#!/bin/python3
import random
f = open("lines_78000000000.txt", "rt")
count = 0
while 1:
buffer = f.read(65536)
if not buffer: break
count += buffer.count('\n')
for i in range(10):
f.readline(random.randint(1, count))
यह मुझे सिर्फ एक मिनट के तहत मिला:
$ time ./shuf.py
./shuf.py 42.57s user 16.19s system 98% cpu 59.752 total
मैंने i9 और सैमसंग NVMe के साथ लेनोवो X1 एक्सट्रीम 2 जीएन पर ऐसा किया, जो मुझे पढ़ने और लिखने की गति प्रदान करता है।
मुझे पता है कि यह तेज़ हो सकता है लेकिन मैं दूसरों को आज़माने के लिए कुछ जगह छोड़ दूँगा।
लाइन काउंटर स्रोत: लूथर ब्लिसटेट