Итак, нашел небольшой баг в своей предыдущей записи в блоге http://kubuntu.ru/node/6346
После команды
cat /путь/к/логу/log.txt | sed "s/#//g" | xargs -0 printf >/путь/к/логу/log.txt
если в log.txt слишком много данных, то xarg выдает ошибку
xargs: строка аргументов слишком велика
Нехорошо получается, надо бы исправиться :)
Мысль такая - заставить xargs считывать лог файл не целиком, а построчно.
Убираем для начала из лог-файла все символы # и записываем результат в обработанный лог
cat /путь/к/логу/log.txt | sed "s/#//g" >/путь/к/логу/обработанному/test-log.txt
Описываем переменную, которая будет содержать результат выполнения команды подсчета числа строк в обработанном лог-файле
logeven="`wc -l /путь/к/логу/обработанному/test-log.txt | tr "/" "\n" | head -1`"
Добавляем дату создания лога с целью перезаписи данных в первоначальный лог-файл
echo "backup `date "+%Y-%m-%d"` /путь/к/логу/log.txt
Начинаем цикл, который для каждой из строк, от 1 до переменной logeven (число строк в лог-файле), выполнит преобразование из восьмибитной кодировки в читаемый формат
for ((log=1; log<=logeven; log++))
do
cat /путь/к/логу/обработанному/test-log.txt | head -$log | tail -1 | xargs -0 printf >>$/путь/к/логу/log.txt
done
Удаляем обработанные ненужные логи
find /путь/к/логу/обработанному/ -maxdepth 1 -name "test-log.txt" -exec rm -f {} \;
Спасибо за внимание :)
Комментарии (1)
А не проще ли?
for log in `cat /путь/к/логу/обработанному/test-log.txt`
do
echo ${log} >> /путь/к/логу/log.txt
done
Отправить комментарий