У меня есть огромный 313 000 строк журнала, который выглядит ниже. Я пытаюсь найти быстрый способ сложить всех игроков онлайн: (число)/100. Так что просто сложите все (число) вместе.

Пример данных:

[04-28-2018 22:49:30] TPS: 20.0 Memory free: 2394.0/4551.0 (52%) Players online: 19/100 Total chunks loaded: 8413 Total entities: 1532

регистрация Java

2 ответа2

1

Звучит как работа для awk! Предполагая, что формат несколько стабилен, следующий скрипт awk должен выполнить эту работу:

$ cat t1
[04-28-2018 22:49:30] TPS: 20.0 Memory free: 2394.0/4551.0 (52%) Players online: 20/100 Total chunks loaded: 8413 Total entities: 1532
[04-28-2018 22:49:30] TPS: 20.0 Memory free: 2394.0/4551.0 (52%) Players online: 20/100 Total chunks loaded: 8413 Total entities: 1532
[04-28-2018 22:49:30] TPS: 20.0 Memory free: 2394.0/4551.0 (52%) Players online: 20/100 Total chunks loaded: 8413 Total entities: 1532
[04-28-2018 22:49:30] TPS: 20.0 Memory free: 2394.0/4551.0 (52%) Players online: 20/100 Total chunks loaded: 8413 Total entities: 1532
[04-28-2018 22:49:30] TPS: 20.0 Memory free: 2394.0/4551.0 (52%) Players online: 20/100 Total chunks loaded: 8413 Total entities: 1532

$ awk '{po=$11; split(po,a,"/"); sum+=a[1]} END {print sum}' t1
100

В основном шаги:

1) Присвойте позицию 11 каждой строки переменной po 2) Разбейте po на символ / и присвойте части массиву 3) Добавьте первый элемент массива a в переменную промежуточной суммы 4) Конец совпадений после всех данных прочитано, распечатать итоговую сумму

Если в файле есть другие данные, вы можете указать awk просто обрабатывать строки, которые соответствуют определенному шаблону, например:

$ awk '/TPS:/ {po=$11; split(po,a,"/"); sum+=a[1]} END {print sum}' t1

По умолчанию Awk устанавливается на Mac и Linux, и его можно бесплатно загрузить в Windows. Смотрите: https://stackoverflow.com/q/21927944/988525 или быстрый поиск в Google. Cygwin или новая подсистема Windows Linux немного больше требуют настройки, но откроют мир замечательных инструментов, которые можно использовать для решения подобных проблем.

0

Если это разовый вопрос и его не нужно писать в сценарии, вы также можете загрузить файл в свою любимую программу для работы с электронными таблицами и использовать текст-столбцы для разделения данных. Цель состоит в том, чтобы закончить с игроками онлайн в одной колонке, которую можно суммировать, конечно. Более подробное руководство, но если данные грязные и разовые, это может быть полезным для очистки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .