Подниму тему.
Вот решил такой файл помучать:
Код: Выделить всё
'27967','1','+73439758384','+73439758384','+73439758384','+73439758384','+73439758384','3600',NULL
'27967','2','+73439758385','+73439758385','+73439758385','+73439758385','+73439758385','3600',NULL
'27967','3','+73439758386','+73439758386','+73439758386','+73439758386','+73439758386','3600',NULL
хочется получить возможность генерить файл с другими номерами, например большими на известную величину, и это даже кое как почти получилось:
Код: Выделить всё
'27967 1 '+73439758448' '+73439758448' '+73439758448' '+73439758448@xxx.yy.ru' 73439758448 3600',NULL
'27967 2 '+73439758449' '+73439758449' '+73439758449' '+73439758449@xxx.yy.ru' 73439758449 3600',NULL
'27967 3 '+73439758450' '+73439758450' '+73439758450' '+73439758450@xxx.yy.ru' 73439758450 3600',NULL
c помощь вот такой конструкции:
Код: Выделить всё
#!/bin/awk -f
BEGIN {
FS="','" # заодно с разделитем знаки ' '
num = 64
}
{($3=$3+num) #добавляется число портов на плате к числу в 3м поле
($3="'+" $3 "'") #возвращаем число к виду строки со знаком +
($4=$4+num) #добавляется число портов на плате к числу в 4м поле
($4="'+" $4 "'")
($5=$5+num)
($5="'+" $5 "'")
($6=$6+num)
($6="'+" $6 "@xxx.yy.ru'")
($7=$7+num)
; print}
Но как то совсем не кошерно получилось. Надо на выходе точно такой же формат полей с номерами в одинарных кавычках, разделитель полей - "," , одинарные кавычки не дают делать арифметические операции с содержимым полей. И что-нибудь да теряется нужное. Решил удалить лишнее для начала, а потом, после математики, вставить обратно.
Код: Выделить всё
{for( i = 1; i < NF; i++ )
gsub(/'/, " ", $i)}
Но обратное действие не получается провести.
Вобщем посоветуйте как красиво сделать. Может совсем с другой стороны зайти как то.