powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / преобразование файла (редактирование)
6 сообщений из 6, страница 1 из 1
преобразование файла (редактирование)
    #34153398
НаташаXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть такой файл

2006-10-24 00:01:19 CVB00 2000010 *** AIS - alarm indication signal |Port 235 |
2006-10-24 00:01:22 CVB00 2000010 --- AIS - alarm indication signal |Port 235 |
2006-10-24 00:01:22 CVB00 2000010 *** AIS - alarm indication signal |Port 235 |
2006-10-24 00:01:23 CVB00 2000010 --- AIS - alarm indication signal |Port 235 |
2006-10-24 09:45:04 cvb00 1000310 *** Wrong IVx identity |Board 2 |
нужно что-бы выглядело так
2006-10-24 00:01:19 CVB00 2000010 *** Port 235 AIS - alarm indication signal
2006-10-24 00:01:22 CVB00 2000010 --- Port 235 AIS - alarm indication signal
2006-10-24 00:01:22 CVB00 2000010 *** Port 235 AIS - alarm indication signal
2006-10-24 00:01:23 CVB00 2000010 --- Port 235 AIS - alarm indication signal
2006-10-24 09:45:04 cvb00 1000310 *** Board 2 Wrong IVx identity

с помощью этого не получается, в чем ошибка
$ awk '{printf("%s %-10s %s\n",substr($0,0,37),$2,substr($0,39))}' FS="|" t.dat
...
Рейтинг: 0 / 0
преобразование файла (редактирование)
    #34154837
BlackStar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
bs@Hearse:~/prj/a> cat test.txt
 2006 - 10 - 24   00 : 01 : 19  CVB00  2000010  *** AIS - alarm indication signal |Port  235  |
 2006 - 10 - 24   00 : 01 : 22  CVB00  2000010  --- AIS - alarm indication signal |Port 235 |
 2006 - 10 - 24   00 : 01 : 22  CVB00  2000010  *** AIS - alarm indication signal |Port  235  |
 2006 - 10 - 24   00 : 01 : 23  CVB00  2000010  --- AIS - alarm indication signal |Port 235 |
 2006 - 10 - 24   09 : 45 : 04  cvb00  1000310  *** Wrong IVx identity |Board  2  |

bs@Hearse:~/prj/a> perl -e 's/(.+)([*-]{3})(.+)\|(.*)\|/\1\2 \4\3/; print;' -n < test.txt
 2006 - 10 - 24   00 : 01 : 19  CVB00  2000010  *** Port  235   AIS - alarm indication signal 
 2006 - 10 - 24   00 : 01 : 22  CVB00  2000010  --- Port 235  AIS - alarm indication signal 
 2006 - 10 - 24   00 : 01 : 22  CVB00  2000010  *** Port  235   AIS - alarm indication signal 
 2006 - 10 - 24   00 : 01 : 23  CVB00  2000010  --- Port 235  AIS - alarm indication signal 
 2006 - 10 - 24   09 : 45 : 04  cvb00  1000310  *** Board  2   Wrong IVx identity 

--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
преобразование файла (редактирование)
    #34155257
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НаташаXX, Ваша ошибка в том, что второй substr у Вас базировался тоде на $0, что неверно
надо было так

awk '{printf("%s %-10s %s\n",substr($0,0,37),$2,substr($1,39))}' FS="|"

хотя я не люблю считать длинные цифирки типа 37,39 и сделал бы так:

awk -F"|" '{i=match($0,"\\*\\*\\*|---");print substr($0,1,i+3) $2 substr($1,i+4,length($1))}'


P.S. в перловом варианте лишний пробел получился, пофиксить надо.
Типа того

perl -ne 's/(.+)([*-]{3}) (.+)\|(.*)\|/\1\2 \4\3/; print;' <test.txt
...
Рейтинг: 0 / 0
преобразование файла (редактирование)
    #34156542
НаташаXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--null--НаташаXX, Ваша ошибка в том, что второй substr у Вас базировался тоде на $0, что неверно
надо было так

awk '{printf("%s %-10s %s\n",substr($0,0,37),$2,substr($1,39))}' FS="|"

хотя я не люблю считать длинные цифирки типа 37,39 и сделал бы так:

awk -F"|" '{i=match($0,"\\*\\*\\*|---");print substr($0,1,i+3) $2 substr($1,i+4,length($1))}'


P.S. в перловом варианте лишний пробел получился, пофиксить надо.
Типа того

perl -ne 's/(.+)([*-]{3}) (.+)\|(.*)\|/\1\2 \4\3/; print;' <test.txt

Я поняла ошибку, но %-10 s не работает, т.е. $2 выводит

2006-10-24 00:01:19 CVB00 2000010
2006-10-24 00:01:22 CVB00 2000010
вместо

Port 235 AIS
Port 235 AIS
...
Рейтинг: 0 / 0
преобразование файла (редактирование)
    #34156543
НаташаXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--null--НаташаXX, Ваша ошибка в том, что второй substr у Вас базировался тоде на $0, что неверно
надо было так

awk '{printf("%s %-10s %s\n",substr($0,0,37),$2,substr($1,39))}' FS="|"

хотя я не люблю считать длинные цифирки типа 37,39 и сделал бы так:

awk -F"|" '{i=match($0,"\\*\\*\\*|---");print substr($0,1,i+3) $2 substr($1,i+4,length($1))}'


P.S. в перловом варианте лишний пробел получился, пофиксить надо.
Типа того

perl -ne 's/(.+)([*-]{3}) (.+)\|(.*)\|/\1\2 \4\3/; print;' <test.txt

Я поняла ошибку, но %-10 s не работает, т.е. $2 выводит

2006-10-24 00:01:19 CVB00 2000010
2006-10-24 00:01:22 CVB00 2000010
вместо

Port 235 AIS
Port 235 AIS
...
Рейтинг: 0 / 0
преобразование файла (редактирование)
    #34156551
НаташаXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НаташаXX[quot --null--]НаташаXX, Ваша ошибка в том, что второй substr у Вас базировался тоде на $0, что неверно
надо было так

awk '{printf("%s %-10s %s\n",substr($0,0,37),$2,substr($1,39))}' FS="|"

хотя я не люблю считать длинные цифирки типа 37,39 и сделал бы так:

awk -F"|" '{i=match($0,"\\*\\*\\*|---");print substr($0,1,i+3) $2 substr($1,i+4,length($1))}'


P.S. в перловом варианте лишний пробел получился, пофиксить надо.
Типа того

perl -ne 's/(.+)([*-]{3}) (.+)\|(.*)\|/\1\2 \4\3/; print;' <test.txt
Спасибо, вы все такие умнички
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / преобразование файла (редактирование)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]