скрипт для сортировки данных

Модератор: Модераторы разделов

effa
Сообщения: 3

скрипт для сортировки данных

Сообщение effa »

есть файл aaa в который раз в минуту пишутся данные блоками по 4 значения (name,time,url1,url2):
<name>
<time>
<url1>
<url2>
<name2>
<time2>
<url1a>
<url2a>
<name3>
<time3>
<url1b>
<url2b>

Выглядит так:

нужен скрипт который будет:
- просматривать этот файл, создавать новые директории для новых блоков(по имени time), если есть старые - игнорировать.
- скачивать файлы (хоть wgetом) по обоим урлам и складывать их в директорию своего блока.
- в идеале еще бы и записывать имя name в текстовый файл и складывать в директорию своего блока.

Сейчас эти данные просто складываются подряд(каждый раз по 4 значения), но теоретически можно настроить какой-нибудь разделитель.
Неуверен как это толково сделать, прошу подсказать.
Скрипт будет запускаться по крону.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21351
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: скрипт для сортировки данных

Сообщение Bizdelnick »

А в чём, собственно, проблема?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
effa
Сообщения: 3

Re: скрипт для сортировки данных

Сообщение effa »

самое трудное - это первая часть:
т.е. как сделать чтобы выбирался именно таймстемп в качестве имени директории, и как сделать проверку на существующую директорию с таким уже именем и выбрать следующий таймстемп для обработки(выбирать, например, 2ю строку+4 до следующего?)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: скрипт для сортировки данных

Сообщение drBatty »

effa писал(а):
02.02.2014 00:28
нужен скрипт

это либо в job, либо с $25 ко мне в ЛС.

Если хотите здесь обсудить, показывайте что написали, и что у вас не работает(работает не так).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21351
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: скрипт для сортировки данных

Сообщение Bizdelnick »

effa писал(а):
02.02.2014 02:04
самое трудное - это первая часть

Читаете в цикле 4 строки в 4 переменных.

effa писал(а):
02.02.2014 02:04
как сделать чтобы выбирался именно таймстемп в качестве имени директории

Передаёте соответствующую переменную в качестве аргумента mkdir (если скрипт на шелле, или аналогичной функции в perl/python/что Вы любите).

effa писал(а):
02.02.2014 02:04
как сделать проверку на существующую директорию с таким уже именем

В шелле - man test, в perl - man perlfunc (в самом начале по алфавиту).

effa писал(а):
02.02.2014 02:04
выбрать следующий таймстемп для обработки

Перейти к следующей итерации цикла.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
effa
Сообщения: 3

Re: скрипт для сортировки данных

Сообщение effa »

Итого получилось добавить в файл обозначения для каждой строки примерно так:
> cat test
var1 <name>
var2 <time>
var3 <url1>

сам скрипт:
#!/bin/bash

DIRECTORY=/home/user/testdir

for i in $(grep var2 $DIRECTORY/test|awk '{print $2}');
do mkdir $i;
cd $i;
for name in $(grep var1 $DIRECTORY/test|awk '{print $2}'); do
if [ -f "$DIRECTORY/$i/$name" ];
then echo have;
else
touch $name;
fi
done;
cd $DIRECTORY;
done

Однако второй цикл for name пробегает сразу по всему файлу и соответственно создает в каждой новой дире файлы с именами из всего файла.
Как сделать так, чтобы он в каждой созданной директории создавал только 1 файл с именем соответствующий своему блоку?
И, соответственно, в следующий раз чтобы чтение файла test продолжилось с того момента где он остановился в прошлый раз.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21351
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: скрипт для сортировки данных

Сообщение Bizdelnick »

Я имел в виду - делать всё в одном цикле.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: скрипт для сортировки данных

Сообщение drBatty »

effa писал(а):
02.02.2014 18:22
for i in $(grep var2 $DIRECTORY/test|awk '{print $2}');

да, тут один цикл нужен

while read name value; do
case $name in
*var1*)
тут обработака
;;
esac
done < $DIRECTORY/test
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: