Есть только уровни обслуживания local0-local7 , нет local8.
Пробовал с awk:
cat file | awk -F ', ' '{ print $1; for(a=2;a <= NF; a ++){printf("%s%s\n",substr($1,1,length($1)-(length($a)-1)),substr($a, 2)) } }'
Выход:
33520470
33520850
33520860
33520870
33520880
33520890
25453810
13340820
61040146
61040155
60819060
60819079
60819088
Редактировать:
Код для получения правильного результата:
cat file | awk -F ', ' '{ print $1; for(a=2;a <= NF; a ++){ if(length($a) <= 3){ printf("%s%s\n",substr($1,1,length($1)-(length($a)-1)),substr($a, 2))} else { print $a } } }'
Результат:
33520470
33520850
33520860
33520870
33520880
33520890
33630077
25453810
13815206
13815207
13815208
60682651
60709994
13340820
61040146
61040155
60819060
60819079
60819088
Обновлен с шагом предварительной -обработки для обработки измененного ввода.
Остальная часть этого ответа предполагает, что данные были предварительно -обработаны с помощью
grep -oE '[0-9]{8}(, -[0-9]+)*'
То есть полное решение потребует
grep -oE... file | awk...
BEGIN { FS = ", *" }
{
print $1
for (i = 2; i <= NF; ++i)
print substr($1, 1, length($1) - length($i) + 1) substr($i, 2)
}
Этот awk
скрипт читает строку, а затем печатает первое поле, разделенное запятыми -. Затем он перебирает оставшиеся поля и выводит первое поле с обрезанными в конце символами, достаточными для вставки символов после -
в другие поля.
Код допускает «суффиксы» переменной длины.
Тестирование:
$ awk -f script.awk file
33520470
33520850
33520860
33520870
33520880
33520890
25453810
13340820
61040146
61040155
60819060
60819079
60819088
Другой пример:
$ cat file
1111
2222,-3,-4, -33,-44, -333,-444
$ awk -f script.awk file
1111
2222
2223
2224
2233
2244
2333
2444
Как «один -лайнер»:
awk -F ', *' '{print $1; for(i=2;i<=NF;++i)print substr($1,1,length($1)-length($i)+1)substr($i,2)}' file