W przypadku naprawdę dużego pliku, takiego jak 1 GB, wc -l
dzieje się to powoli. Czy mamy szybszy sposób obliczania liczby nowych linii dla określonego pliku?
wc
masz zbyt dużo kosztów ogólnych, możesz spróbować wdrożyć własne foreach byte in file: if byte == '\n': linecount++
. Jeśli zaimplementowane w C lub asemblerze, nie sądzę, że przyspieszy, chyba że w przestrzeni jądra na RTOS o najwyższym priorytecie (lub nawet w tym celu użyj przerwania - po prostu nie możesz nic zrobić z systemem. .. w porządku, dygresję ;-))
time wc -l some_movie.avi
niebuforowanego pliku, w wyniku czego 5172672 some_movie.avi -- real 0m57.768s -- user 0m0.255s -- sys 0m0.863s
. Co w zasadzie dowodzi, że @thrig ma rację, we / wy zaburza wydajność w tym przypadku.
time wc -l some_large_file_smaller_than_cache
dwa razy z rzędu szybko i zobacz, jak szybka jest druga operacja, a następnie time wc -l some_large_file_larger_than_cache
zobacz, jak czas nie zmienia się między uruchomieniami. W przypadku pliku o wielkości ~ 280 MB czas ten wynosi od 1,7 sekundy do 0,2 sekundy, ale w przypadku pliku 2 GB jest to 14 sekund za każdym razem.
/usr/bin/time wc -l <file>
mówi? Jaki masz sprzęt? Czy to szybciej, jeśli uruchomisz polecenie wielokrotnie? Naprawdę potrzebujemy więcej informacji;)
0x0A
inessacji, we / wy jest niewątpliwie wąskim gardłem.