URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7014
[ Назад ]

Исходное сообщение
"Скрипт добавления символа в нужное место ЛОГа"

Отправлено ZXprSL , 08-Дек-07 18:48 
Подскажите как на Перле или может ещё на чём в нужное место (т.к. в ЛОГ-файле все поля в одних и тех же местах) при условии, что слово наинается на 77 или 76 подставить в начало тройку,т.е. чтоб на выходе получить результат в том поле 377 или 376 ??

Скрипт просто поиска по шаблону и замены не подходит, т.к. в других полях файла тоже может быть совпадение.

примерный алгаритм:

Если строка начианется с символа "N" и 18й символ имеет значение "7" а 19е "6", то
между 17м и 18м символом воткнуть символ "3" , чтоб при этом как при обычном форматировании текста в текстовом редакторе всё содержимое с права сдвинулось на право на один символ,таким образом, что вставленный символ "3" оказался на 18м месте.. и далее удалить пробел с 24го места.

т.е. на входе:

N 115 00 T013028 76005   11/28 23:04 00:08:44
&       0000    0000   375434XXXXXXXXXX  

а на выходе должно быть так:

N 115 00 T013028 376005  11/28 23:04 00:08:44
&       0000    0000   375434XXXXXXXXXX  


Содержание

Сообщения в этом обсуждении
"Скрипт добавления символа в нужное место ЛОГа"
Отправлено vladin , 08-Дек-07 19:10 
Для вывода на экран

perl -p -e 'if( substr($_,17,2) =~ /7[67]/ ) { substr($_,23,1) = ""; substr($_,17,0)="3";}' /path/to/log

Для правка файла

perl -pi -e 'if( substr($_,17,2) =~ /7[67]/ ) { substr($_,23,1) = ""; substr($_,17,0)="3";}' /path/to/log


"Скрипт добавления символа в нужное место ЛОГа"
Отправлено ZXprSL , 08-Дек-07 21:38 
>Для вывода на экран
>
>perl -p -e 'if( substr($_,17,2) =~ /7[67]/ ) { substr($_,23,1) = "";
>substr($_,17,0)="3";}' /path/to/log
>
>Для правка файла
>
>perl -pi -e 'if( substr($_,17,2) =~ /7[67]/ ) { substr($_,23,1) = "";
>substr($_,17,0)="3";}' /path/to/log

Спасибо, работает :)