Peki shuf cevabı hakkındaki bir açıklamaya göre bir dakika içinde 78000 000 000 satır karıştırdı.
Meydan okuma kabul edilmiştir...
EDIT: Kendi rekorumu kırdım
powershuf 0.047 saniyede yaptı
$ time ./powershuf.py -n 10 --file lines_78000000000.txt > /dev/null
./powershuf.py -n 10 --file lines_78000000000.txt > /dev/null 0.02s user 0.01s system 80% cpu 0.047 total
Bu kadar hızlı olmasının nedeni, tüm dosyayı okumadım ve sadece dosya işaretçisini 10 kez hareket ettirin ve işaretçiden sonra satırı yazdırın.
Gitlab Repo
Eski girişim
Önce 78.000.000.000 satırlık bir dosyaya ihtiyacım vardı:
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
Bu bana 78 Milyar satır;
Şimdi shuf kısmı için:
$ 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
Darboğaz CPU'ydu ve birden fazla iş parçacığı kullanmıyordu, 1 çekirdeği% 100'e sabitledi, diğer 15'i kullanılmadı.
Python düzenli olarak kullandığım şey, bu yüzden bunu daha hızlı yapmak için kullanacağım:
#!/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))
Bu beni bir dakikadan az bir süre aldı:
$ time ./shuf.py
./shuf.py 42.57s user 16.19s system 98% cpu 59.752 total
Bunu, bana bolca okuma ve yazma hızı veren i9 ve Samsung NVMe ile bir Lenovo X1 aşırı 2. nesil üzerinde yaptım.
Daha hızlı olabileceğini biliyorum ama başkalarına denemek için biraz yer bırakacağım.
Satır sayacı kaynağı: Luther Blissett