Dowiedziałem się już, że readline może służyć do odczytu linii pliku po linii, np.Sprawnie odczytywany plik wiersz po wierszu w węźle
readline
.createInterface({input: fs.createReadStream('xxx')})
.on('line', (line) => { apply_regexp_on_line })
.on('close',() => { report_all_regexps });
Jest to jednak dość wolno, bo w porównaniu wydajności grep
i JavaScript regexp, a drugi ma lepsze osiągi na wyrażeniach regularnych testowałem. (patrz benchmark) Tak myślę, że muszę winić węzeł async readline.
W mojej sytuacji nie obchodzi mnie wcale asynchronizacja, po prostu potrzebuję wykorzystać szybkie wyrażenie regularne z JavaScript do przetwarzania bardzo dużych plików dziennika (zazwyczaj 1-2 GB, czasami nawet do 10 GB). Jaki jest najlepszy sposób na zrobienie tego? Moją jedyną troską jest szybkość.
Dodatkowe punkty: niektóre pliki dzienników są spakowane gzipem, więc muszę je rozpakować. Jeśli ktoś może polecić mi szybki czytnik line-by-line dla zwykłego tekstu i gzipowanego tekstu, to byłbym naprawdę doceniony.
Nie jesteś pewien, co 'apply_regexp_on_line' ma, ale czy możliwe jest użycie programu' uni' '' '' '' '' '' '' '' '' '' '' '' 'sed"? Jest dość szybki. Prawdopodobnie można napisać szybki i łatwy skrypt powłoki do rozpakowania i sed'ing. –
Zobacz odnośnik porównawczy w pytaniu. 'sed' nie jest tak szybkie jak JavaScript. Zasadniczo 'apply_regexp_on_line' przechwyci jakiś tekst w pliku dziennika za pomocą regexp i zapisze go, a' report_all_regexps' zgłosi przechwycony tekst w danym formacie. – xis
dzięki za informacje. Nie spodziewałem się, że 'sed' będzie wolniejszy niż regex javascript! up głosowany temat && dodany do ulubionych. Chętnie też znam to rozwiązanie. –