|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Нахождение совпадения в строке и сохранение строк в разные файлы |
|
Любой язык - Нахождение совпадения в строке и сохранение строк в разные файлы
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать Добрый день!
Помогите хотя бы с направлением, куда копать. Есть огромный (несколько млн строк) текстовый файл с логами. Нужно прочитать строку, найти в ней совпадение имени сервиса и в зависимости от этого сохранить строку в другой файл. 20230810 16:44 service1 online 20230810 16:45 service2 online 20230810 17:48 service1 offline 20230810 17:49 service2 offline Заранее спасибо! |
|
Отправлено: 19:03, 10-08-2023 |
Crazy Сообщения: 1176
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
а вообще, для ускорения, можно и потоковое чтение/запись задействовать, что-то типа% |
|
------- Отправлено: 18:42, 15-08-2023 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1754
|
Цитата YuS_2:
A streamreader, это действительно хорошая идея. |
|
Отправлено: 18:58, 15-08-2023 | #12 |
Crazy Сообщения: 1176
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
|
|
------- Отправлено: 21:19, 15-08-2023 | #13 |
fascinating rhythm Сообщения: 6566
|
Профиль | Отправить PM | Цитировать Вот человек целое исследование провёл:
Цитата:
|
|
------- Отправлено: 21:40, 15-08-2023 | #14 |
Ветеран Сообщения: 1754
|
Попробовал с потоком, 1млн строк разбился на два файла за 6 сек:
$reader = [io.streamreader]::new("$pwd/file.log") $writer1 = [io.streamwriter]::new("$pwd/service1.log") $writer2 = [io.streamwriter]::new("$pwd/service2.log") while ($reader.peek() -ne -1) { switch -regex ($out = $reader.readline()) { 'service1' { $writer1.write($out + "`n") } 'service2' { $writer2.write($out + "`n") } } } $reader.close() $writer1.close() $writer2.close() |
Отправлено: 23:07, 15-08-2023 | #15 |
fascinating rhythm Сообщения: 6566
|
Профиль | Отправить PM | Цитировать Foreigner, а если использовать батник megaloman-а?
|
------- Отправлено: 10:54, 16-08-2023 | #16 |
Ветеран Сообщения: 1754
|
Цитата DJ Mogarych:
|
|
Отправлено: 12:24, 16-08-2023 | #17 |
Crazy Сообщения: 1176
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Цитата DJ Mogarych:
|
||
------- Отправлено: 14:51, 16-08-2023 | #18 |
Crazy Сообщения: 1176
|
Профиль | Отправить PM | Цитировать Итоги тестов, вот такого кода:
тестовый код
$file = 'out1500000.txt' '------' '1 - gc $file' (measure-command{ 1..3|%{$arr = $null}{$arr = gc $file} write-host $($arr.count) -for red }).totalseconds '------' '2 - gc $file -ReadCount 10000' (measure-command{ 1..3|%{$arr = $null}{$arr = gc $file -ReadCount 10000} write-host $($arr.count) -for red }).totalseconds '------' '3 - (gc $file -raw) -split "`n"' (measure-command{ 1..3|%{$arr = $null}{$arr = (gc $file -raw) -split "`n"} write-host $($arr.count) -for red }).totalseconds '------' '4 - switch -file $file {default {$psitem}}' (measure-command{ 1..3|%{$arr = $null}{$arr = switch -file $file {default {$psitem}}} write-host $($arr.count) -for red }).totalseconds '------' '5 - [io.file]::readalltext($file) -split "`n"' (measure-command{ 1..3|%{$arr = $null}{$arr = [io.file]::readalltext($file) -split "`n"} write-host $($arr.count) -for red }).totalseconds '------' '6 - [io.file]::readalllines($file)' (measure-command{ 1..3|%{$arr = $null}{$arr = [io.file]::readalllines($file)} write-host $($arr.count) -for red }).totalseconds '------' '7 - [io.file]::readlines($file) -split "`n"' (measure-command{ 1..3|%{$arr = $null}{$arr = [io.file]::readlines($file) -split "`n"} write-host $($arr.count) -for red }).totalseconds '------' '8 - [io.file]::opentext($file).readtoend() -split "`n"' (measure-command{ 1..3|%{$arr = $null}{$arr = [io.file]::opentext($file).readtoend() -split "`n"} write-host $($arr.count) -for red }).totalseconds '------' '9 - $reader.readtoend() -split "`n"' (measure-command{ 1..3|%{$arr = $null}{ $reader = [io.streamreader]::new($file) $arr = $reader.readtoend() -split "`n" $reader.close() } write-host $($arr.count) -for red }).totalseconds - чтобы получить более-менее корректные сравнения, цель работы каждого блока была такой: Считать из файла 1500000 строк и получить массив такого же количества строк. PS 7.3.6 Цитата:
Цитата:
|
||
------- Отправлено: 19:23, 16-08-2023 | #19 |
Ветеран Сообщения: 1754
|
Интересное сравнение с 5.1
|
Отправлено: 19:40, 16-08-2023 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2010 - [решено] Excel 2010. Суммирование по столбцу: разные суммы, лист на млн. строк и т.д. | flev45 | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 29-05-2019 13:12 | |
VBS/WSH/JS - массив из строк, поиск по строке | matson | Скриптовые языки администрирования Windows | 11 | 09-06-2017 21:35 | |
CMD/BAT - [решено] Нахождение совпадения без учета регистра | Mikle_home88 | Скриптовые языки администрирования Windows | 1 | 04-08-2015 15:20 | |
Расшаренные файлы в лок.сети и разные козлы | SimSaf | Хочу все знать | 8 | 08-02-2013 00:02 | |
Как переписать текстовые файлы в разные папки! | Guest | Программирование и базы данных | 7 | 22-10-2004 02:57 |
|