The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Скрипт для обработки большого числа строк., shc0d3r (ok), 06-Май-11, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


1. "Скрипт для обработки большого числа строк."  +/
Сообщение от Andrey Mitrofanov (?), 06-Май-11, 15:36 
> Стоит Ubuntu 10, 4Gb памяти. Есть squid access.log 2.6Gb.
> cat access.log | awk '{if($1 < 1304452799) {print}}' > access.log_new
> Проблема в том, что оперативная память забивается и я получаю логичный результат
> "Out of memory!"

Ума не приложу, чем бы это он логичный. Построчная обработка - куда памяти-то деваться?

Как варианты телодвижений:

1. выкинуть cat
awk '$1 < 1304452799' <access.log > access.log_new

2. попробовать _разные реализации awk - mawk, gawk, ?

3. приделать fflush() (только gawk?)
awk '$1<1304452799{print}NRP000==0{fflush()}' ...

Ответить | Правка | Наверх | Cообщить модератору

2. "Скрипт для обработки большого числа строк."  +/
Сообщение от shc0d3remail (ok), 06-Май-11, 15:51 
> Ума не приложу, чем бы это он логичный. Построчная обработка - куда
> памяти-то деваться?

Андрей, логично, раз память всю загружает.

> 1. выкинуть cat
> awk '$1 < 1304452799' <access.log > access.log_new

Попробую.
> 2. попробовать _разные реализации awk - mawk, gawk, ?

Все перепробовал, результат тот же.

В файле более 9e6 строк. :-(

Ответить | Правка | Наверх | Cообщить модератору

6. "Скрипт для обработки большого числа строк."  +/
Сообщение от ACCA (ok), 06-Май-11, 18:08 
head -n 1304452799 < access.log > access.log_new

Если всё-таки проблема с 32 битами, то сначала порвать файл с помощью split -l, потом собирать из кусочков.

Ответить | Правка | Наверх | Cообщить модератору

4. "Скрипт для обработки большого числа строк."  +/
Сообщение от Andrey Mitrofanov (?), 06-Май-11, 16:22 
> Как варианты телодвижений: =

Ещё , если с awk-ом совсем всё полохо попытаться не читать "в него" весь файл -

awk '$1>=1304452799{exit}{print}' <access.log > access.log_new

   или...

head -n +`awk '$1>=1304452799{print NR-1;exit}' <access.log` <access.log > access.log_new

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру