LINUX.ORG.RU

проблема с AWK


0

0

есть dbf файл, мне из него надо конвертнуть в тхт. Скрипт я сделал, но есть проблема, есть поле в dbf и мне нужно из этого поля выдернуть часть символов и переставить из конца строки в начало. Мозг закипел! Может кто сталкивался?

Где-то у меня ошибка, незнаю где!

BEGIN { s = «мироновапер.» if (match(s,/.*пер\.$/)) { s1 = «переулок» s2 = substr(s,0,length(s)-4) } else { s1 = «улица» s2 = s } print s1 " " s2 s = «ленина» if (match(s,/.*пер\.$/)) { s1 = «переулок» s2 = substr(s,0,length(s)-4) } else { s1 = «улица» s2 = s } print s1 " " s2 }

vlad0201
() автор топика

проблема с awk

Где?

Мозг закипел!

А-а-а, вот в чем проблема.

sdio ★★★★★
()
Ответ на: комментарий от vlad0201

vlad0201> s = «мироновапер.» Нужно чтоб было «пер.Миронова»

$ echo "мироновапер." | sed 's/\(.*\)\(пер\.\)$/\2 \u\1/'
пер. Миронова
sdio ★★★★★
()

Открой в OpenOffice Calc свой dbf и «сохрани как» .txt.

Turbo_Mascal
()
Ответ на: комментарий от beastie

скрипт отработал но есть нюанс, у меня в dbf в строке street разные улицы, и он получается всем присвоил значение пер.миронова, а хотелось бы чтобы только те в которых стоит мироновапер.

vlad0201
() автор топика
Ответ на: комментарий от beastie

Это весь скрипт!

# 1 LS # 2 FIO # 3 CITY # 4 STREET # 5 BUILDING # 6 KORPUS # 7 FLAT # 8 PS

BEGIN {    FS=«|»;    count = 0;    amount = 0.0;    #    print «#0,0,11,0,» strftime(«%Y%m%d»)    print «#accounts,serviceid=120003»    print «#Лицевые счета.Горгаз Мелитополя» }

# 1 inaccount # 2 instreetid # 3 inbuild # 4 inflat # 5 inlastname # 6 indate «YYYYMMDD» # 7 inrest # 8 inlastdate # 9 inlastamount # 10 inlastmeter # 11 inparams # 12 inregion # 13 instreettype # 14 instreet # 15 inbuilding # 16 inaddress # 17 infirstname # 18 inmiddlename

BEGIN { s = «*пер.» if (match(s,/.*пер\.$/)) { s1 = «пер.» s2 = substr(s,0,length(s)-4) } else { s1 = «улица» s2 = s } print s1 " " s2

   if ( $7 == «» ) {       house = $5    } else {       house = $5 "-" $7    }    printf(«%s,,%s,%s,\»%s\",%s,,,,%s,,\«%s\»,,\«%s\»,,,,,\n",$1,$5,$7,gensub(/«/,»\«\»",«g»,$2),date,$8,$3,gensub(/«/,»\«\»",«g»,$4));

   amount += $11 count ++; }

END {    printf «#count: %d, total: %d\n», count, amount }

vlad0201
() автор топика
Ответ на: комментарий от vlad0201

используй [ code ] pls, ни чего же не разобрать. и пример исходных данных, а так же ожидаемый результат в студию.

beastie ★★★★★
()
Ответ на: комментарий от vlad0201

спасибо за помощь. Долго долбался и наконец сделал.

vlad0201
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.