- Скрипт для обработки большого числа строк.,
Andrey Mitrofanov, 15:36 , 06-Май-11 (1)> Стоит 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()}' ...
- Скрипт для обработки большого числа строк.,
shc0d3r, 15:51 , 06-Май-11 (2)> Ума не приложу, чем бы это он логичный. Построчная обработка - куда > памяти-то деваться?Андрей, логично, раз память всю загружает. > 1. выкинуть cat > awk '$1 < 1304452799' <access.log > access.log_new Попробую. > 2. попробовать _разные реализации awk - mawk, gawk, ? Все перепробовал, результат тот же. В файле более 9e6 строк. :-(
- Скрипт для обработки большого числа строк.,
ACCA, 18:08 , 06-Май-11 (6)head -n 1304452799 < access.log > access.log_newЕсли всё-таки проблема с 32 битами, то сначала порвать файл с помощью split -l, потом собирать из кусочков.
- Скрипт для обработки большого числа строк.,
Andrey Mitrofanov, 16:22 , 06-Май-11 (4)> Как варианты телодвижений: =Ещё , если с 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
- Скрипт для обработки большого числа строк.,
phpcoder, 16:00 , 06-Май-11 (3)(раз уж вовремя не сделали rotate логов) я бы попробовал "разрезать" его на несколько файлов поменьше, с помощью split(1), а затем уже обрабатывать их.
- Скрипт для обработки большого числа строк.,
gpl77, 17:51 , 06-Май-11 (5) > Проблема в том, что оперативная память забивается и я получаю логичный результат > "Out of memory!" > Что делать? Помогите пожалуйста.память это вряд ли. ведь еще swap есть? или нет? а скорее всего где то 32-битное число переполняется. ведь система i386? или amd64? посмотрите что у awk с поддержкой 64-bit и файлов больше 2G перекомпилируйте/найдите другой awk
- Скрипт для обработки большого числа строк.,
shc0d3r, 20:19 , 06-Май-11 (7)> память это вряд ли. > ведь еще swap есть? или нет?В том-то и дело, что swap не изменяется. Т.е. free -m показывает, что память вот-вот закончится, а swap`а ещё ого-го. > а скорее всего где то 32-битное число переполняется. > ведь система i386? > или amd64? i386 >файлов больше 2G Не нашел нигде акцентов на узкие места с размером файла. > перекомпилируйте/найдите другой awk Те же грабли. Сейчас попробую исключить cat.
- Скрипт для обработки большого числа строк.,
gpl77, 23:22 , 06-Май-11 (8)> i386 >>файлов больше 2G > Не нашел нигде акцентов на узкие места с размером файла. >> перекомпилируйте/найдите другой awk > Те же грабли. > Сейчас попробую исключить cat.i386 - значит где то в awk/shell/cat переполняется 32-битное число вот и: out of memory попробуйте запустить тот же скрипт под amd64 или ищите где именно переполняется и опять же ищите как/можно ли исправить
- Скрипт для обработки большого числа строк.,
shc0d3r, 18:18 , 07-Май-11 (9)> попробуйте запустить тот же скрипт под amd64 > или ищите где именно переполняется и опять же ищите > как/можно ли исправить Сработал. Удивительно. К сожалению нет времени разобраться. Всем спасибо, с наступающим днём Победы!
- Скрипт для обработки большого числа строк.,
pavlinux, 15:57 , 09-Май-11 (10)> Привет всем. > Стоит Ubuntu 10, 4Gb памяти. Есть squid access.log 2.6Gb. > Нужно переместить из этого файла все строки до определенного числа в другой > файл. > cat access.log | awk '{if($1 < 1304452799) {print}}' > access.log_new > Проблема в том, что оперативная память забивается и я получаю логичный результат > "Out of memory!" > Что делать? Помогите пожалуйста.SIZEOF_FILE=$(du -b /var/log/squid/access.log 2>&1 | awk '{print $1}') LINES=$(echo "(2^32-1)/80" | bc); for (( i=1; i < $(($SIZEOF_FILE / $LINES )); i++ )) do tail -n $(($LINES*$i)) /var/log/squid/access.log; done как-то так
- Скрипт для обработки большого числа строк.,
LSTemp, 04:25 , 12-Май-11 (11)
|