Potrzebujemy pliku zawierającego liczby:
0000000000..1000000000
i
0..1000000000
skąd możemy pobrać tego rodzaju listy?
Przykład 1:
000000001
000000002
...
099999999
100000000
Przykład 2: 1 2 ... 999999999 1000000000
Jeśli szukam stron z torrentami lub tylko Google, mogę znaleźć tylko pliki zawierające ~ 8 cyfr, ale potrzebujemy 10.
Próbowaliśmy wygenerować te pliki:
var=0; while true; do var=$((var+1)); echo $var >> sorted-generated-only-numbers-length-from-1-to-10-chars-zero-at-start-too.txt; done
ale wygenerowanie pliku zajmie wieki, nawet na większej maszynie. Poważnie..
AKTUALIZACJA: Próbowaliśmy użyć: var = 0; var2 = 100000; chociaż prawda; do tmpbuffer100k = $ (sekw. $ var $ var2; var = $ ((var + 100000)); var2 = $ ((var2 + 100000))); echo „$ tmpbuffer100k” >> output.txt; gotowy
aby uniknąć zapisu na dysk, zamiast tego umieszczamy np .: 100 000 liczb w zmiennej, a następnie zapisujemy ją na dysku - aby przyspieszyć, ale jeszcze nie działa. Zapisuje tylko pierwszy zakres, 1..100000
Odpowiedzi:
Oto wydajne rozwiązanie pure Bash:
Ponieważ wykorzystuje tylko wbudowane Bash, nie są tworzone żadne dodatkowe procesy. Otwiera plik
target_file
raz i przekierowuje wszystkie dane wyjściowe z funkcji do tego pliku.Funkcja przerywa się automatycznie po osiągnięciu wartości docelowej.
Oczywiście, w porównaniu z rodzimym narzędziem, takim jak
seq
, wciąż jest niesamowicie wolny:Ostrzeżenie
Pliki wynikowe będą bardzo duże. Plik zawierający 0..1000000000, wypełniony zerami, będzie miał
To 10,24 GiB ! Ty naprawdę powinna ponownie rozważyć swoje podejście do problemu, co starasz się rozwiązać.
źródło
Sprawdźmy najpierw rozwiązanie na przykład 2:
W systemie Linux masz
seq
na przykład:wydrukuje tę listę:
Skieruj wyjście do pliku:
Teraz, gdy rozumiesz, jak
seq
działa, wróćmy do przykładu 1 :Jeśli dodasz do
seq
flagi-f
, możesz dodać dopełnienie do wygenerowanej sekwencji, na przykład:Dodanie dopełnienia do każdej liczby w celu sformatowania jej jako 5 cyfr:
W konkretnym przypadku musisz użyć,
-f "%010g"
aby uzyskać 10-cyfrowe długie liczby.źródło
-w
Flaga jest szybszy sposób, aby uzyskać dopełnienie do wysokości cyfr w górnej granicy.