Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет salambo ([info]salambo)
@ 2012-11-02 11:26:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Bill, i need help
Так, а кто у меня из друзей в Shell хорошо разбирается? . Надо просто один файл переработать и составить из него другой.
Был бы перл установлен - я б сама справилась бы, а с shell не сильна я в нем

Unix Aix / Linux


(Добавить комментарий)


[info]dimas@lj
2012-11-02 09:55 (ссылка)
насколько сложное преобразование? если каждая строчка по-отдельности и регэкспа хватит, то возьми sed.

(Ответить) (Ветвь дискуссии)


[info]salambo@lj
2012-11-02 10:12 (ссылка)

Возьми-возьми.... я в этом sed нихрена не понимаю

Короче есть файл-input вот в такой форме:

Tablespace Containers for Tablespace 0

Container ID = 0
Name = /instance_db2udb/umdex001/UR01EX00/C001/umdex001/NODE0000/UR01EX00/T0000000/C0000000.CAT
Type = File
Total pages = 10240
Useable pages = 10236
Accessible = Yes


list tablespace containers for 1 show detail

Tablespace Containers for Tablespace 1

Container ID = 0
Name = /instance_db2udb/umdex001/tmp/UR01EX00/TEMP4K1
Type = Path
Total pages = 1
Useable pages = 1
Accessible = Yes



Надо его преобразовать и получить другой файл-output с командами :


set tablespace containers for 0 using (file '/instance_db2udb/umdix001/UR01IX00/C001/umdix001/NODE0000/UR01IX00/T0000000/C0000000.CAT' 10240)"
set tablespace containers for 1 using (path '/instance_db2udb/umdix001/tmp/UR01IX00/TEMP4K1')"

если типе = File - то "using (file и numbre pages = 10240

если типе = Path , то using (path

Был б десяток tablespaces, то можно было в ручную сделать, но база с 99 тс.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dimas@lj
2012-11-02 10:31 (ссылка)
уууу … надо думать, навскидку не подскажу … а перл или питон не проще поставить? или php какой, прости гсподи …

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]salambo@lj
2012-11-02 10:37 (ссылка)
Был бы перл - я б не мучалась. И поставить, увы, ничего не могу. Я - DBA, а не администратор систем.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dimas@lj
2012-11-02 10:47 (ссылка)
sed то точно есть?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]salambo@lj
2012-11-02 11:24 (ссылка)
А как это проверить?
Дай мне простейший пример, чтоб я попробовала.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dimas@lj
2012-11-02 11:26 (ссылка)
ну набери

sed --help

в консоли

(Ответить) (Уровень выше)


[info]salambo@lj
2012-11-02 11:30 (ссылка)
[umdex001@LXDB1:/instance_db2udb/umdex001/tmp/copie] $sed --help
sed: Option non reconnue : -
Usage: sed [-n] [-u] Script [File ...]
sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]
[umdex001@LXDB1:/instance_db2udb/umdex001/tmp/copie] $

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dimas@lj
2012-11-02 11:31 (ссылка)
значит есть. щас попробую

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]salambo@lj
2012-11-02 11:33 (ссылка)
А давай я тебе скину просто файл инпут, а? Кинь мне свое мыло на salambo48(sobaka)gmail.com

Please!!

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dimas@lj
2012-11-02 11:33 (ссылка)
нее, щас я тебе дам фиговинку, по месту допилить проще

(Ответить) (Уровень выше)


[info]dimas@lj
2012-11-02 11:39 (ссылка)
попробуй вот это:

cat <твой файл> | sed '/^$/d' | sed '/^Container ID = [0-9]\+$/d' | sed -e "s/Name = \(.\+.CAT\)$/using(file '\1' 10240)/" | sed -e "s/Name = \(.\+\)$/using(path '\1')/" | sed '/^Type = .\+$/d' | sed '/^.\+ pages = .\+$/d' | sed '/^Accessible = .\+$/d' | sed '/^list tablespace .*$/d' | sed -e :a -e N -e 's/\n//' -e ta | sed 's/)/)\n/' | sed 's/Tablespace Containers for Tablespace \([0-9]\+\)/set tablespace containers for \1 /'

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]salambo@lj
2012-11-02 11:54 (ссылка)
Все одной строкой?
Что-то он мне ничего не выдает. Может все-таки sed не установлен?

(Ответить) (Уровень выше)


[info]salambo@lj
2012-11-02 11:55 (ссылка)
[umdex001@LXDB1:/instance_db2udb/umdex001/tmp/copie] $cat result.txt | sed '/^$/d' | sed '/^Container ID = [0-9]\+$/d' | sed -e "s/Name = \(.\+.CAT\)$/using(file '\1>
[umdex001@LXDB1:/instance_db2udb/umdex001/tmp/copie] $


И ничего :((((

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dimas@lj
2012-11-02 12:13 (ссылка)
ну может быть у тебя другой sed ... ну или пришли мне таки файл на dimasg ат gmail.com

(Ответить) (Уровень выше)


[info]log2stas@lj
2012-11-02 10:44 (ссылка)
Я бы для начала убрал using grep все строки из файла где нет name и path так как они в данном контексте мусор а далее все зависит как хорошо вы знаете regular expression и знаете как использовать capturing groups

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]salambo@lj
2012-11-02 11:22 (ссылка)
Стас, я только-только пересела на unix с Z/OS. С DB2 LUW я разбирусь, а вот в системе - пока 0!!

а ты говоришь...
"а далее все зависит как хорошо вы знаете regular expression и знаете как использовать capturing groups "

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]log2stas@lj
2012-11-02 20:08 (ссылка)
grep 'Name=\|Type=' filename >anotherfilename

это вырежет из исходного файла все строки в которых есть Name= и Type=. Потом нужно будет открыть получившийся файл в каком нибудт простеньком text editor например Notepad++ (http://notepad-plus-plus.org/) уже в windows и там творить (в редакторе есть способы использовать регулярные выражения для поиска и замены). Ещё более простой способ загрузить файл в Excel и там уже написать формулу которая из ячейки берёт информацию и преообразоывает согласно информации из следующей ниже ячейки

(Ответить) (Уровень выше)


[info]dimas@lj
2012-11-02 11:07 (ссылка)
вобщем общая идея — чем-то типа

sed -e :a -e N -e 's/\n/ /' -e ta

слить всё в одну строку, обработать и потом порезать, или наоборот, с помощью

sed '/^$/d'
sed '/^Container ID = [0-9]\+$/d'

удалить пустые или ненужные строки, преобразовать нужные, а потом аналогом первого вызова слить вместе нужные строки

(Ответить)