The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"добавить поле в середину строки при помощи sed или awk"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от Pojin on 11-Мрт-10, 00:09 
что-то туплю вроде задача простая, если рассматривать как поля,но можно ли решить задачу автоматически текстовым редактором?
есть большой текстовый файл со строчками вида
слово1 слово2 слово3 итд
слово4 слово5 слово6 итд
нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой
думал банально заменить sed-ом,пробел на точку с запятой,но блин пробелов там много нужных
Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от phpcoder email(??) on 11-Мрт-10, 06:59 
>есть большой текстовый файл со строчками вида
>слово1 слово2 слово3 итд
>слово4 слово5 слово6 итд
>нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой

$ sed 's|^\([^ ]\+ [^ ]\+\)\( .*\)$|\1;\2|' test.txt
слово1 слово2; слово3 итд
слово4 слово5; слово6 итд

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от phpcoder email(??) on 11-Мрт-10, 08:37 
>[оверквотинг удален]
>>>слово1 слово2 слово3 итд
>>>слово4 слово5 слово6 итд
>>>нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой
>>
>>$ sed 's|^\([^ ]\+ [^ ]\+\)\( .*\)$|\1;\2|' test.txt
>>слово1 слово2; слово3 итд
>>слово4 слово5; слово6 итд
>
>товарисчи! асвойте уже перл - там такие весчи делать просто ВААХ КААК
>ХАРАШО!

На Perl-е почти также:

$ perl -wpe 's|^([^\s]+ [^\s]+)( .*)$|$1;$2|' test.txt
слово1 слово2; слово3 итд
слово4 слово5; слово6 итд

Но автор просил на sed/awk.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от Pahanivo email(ok) on 11-Мрт-10, 09:02 
>[оверквотинг удален]
>>товарисчи! асвойте уже перл - там такие весчи делать просто ВААХ КААК
>>ХАРАШО!
>
>На Perl-е почти также:
>
>$ perl -wpe 's|^([^\s]+ [^\s]+)( .*)$|$1;$2|' test.txt
>слово1 слово2; слово3 итд
>слово4 слово5; слово6 итд
>
>Но автор просил на sed/awk.

s/^(\s*\S+\s+\S+)(.*)$/$1;$2/
также можно поизвращатся с метой \b (граница слова), но я не помню как он робит

ЗЫ да можно и сидом, но сам сид пишется на перле двумя строчками цикла чтения с stdin + одна строчка на каждую нужную обработку.
я не отрицаю прелестей сид, но всетаки перлом тексты рулит удобнее, намного удобнее

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от L0n3R4ng3r (ok) on 11-Мрт-10, 10:52 
>что-то туплю вроде задача простая, если рассматривать как поля,но можно ли решить
>задачу автоматически текстовым редактором?
>есть большой текстовый файл со строчками вида
>слово1 слово2 слово3 итд
>слово4 слово5 слово6 итд
>нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой
>
>думал банально заменить sed-ом,пробел на точку с запятой,но блин пробелов там много
>нужных

cat /tmp/test
слово1 слово2 слово3 итд
слово4 слово5 слово6 итд

PERL :
cat /tmp/test |  perl -ne 'my($a,$b,$c) = split(/\s+/,$_); print "$a $b; $c\n"'
слово1 слово2; слово3
слово4 слово5; слово6

AWK :
cat /tmp/test |  awk '{$2 = $2";" ; print $0}'
слово1 слово2; слово3 итд
слово4 слово5; слово6 итд


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от L0n3R4ng3r (ok) on 11-Мрт-10, 10:55 
FIXED:
perl -ne 'my($a,$b,@c) = split(/\s+/,$_); print "$a $b; @c\n"'
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от Pahanivo email(ok) on 11-Мрт-10, 12:01 
>FIXED:
>perl -ne 'my($a,$b,@c) = split(/\s+/,$_); print "$a $b; @c\n"'

На опене народ любит меряться пиписьками. Правда айтишнегов отличает тот факт, что лучшей длинной считается наименьшая, да и внешний вид не на последнем месте. Высшим же достижение считается завязать в узел так, что бы никто не понял как ))

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

10. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от L0n3R4ng3r (ok) on 11-Мрт-10, 13:32 
>Высшим же достижение считается завязать в узел так, что бы
>никто не понял как ))

ИМХО я не считаю что примерно сложный для понимания ;)
всего 2 действия
1. режиться на три части с помощью split'a (слово,слово и все остальное)
2. выводиться все с ';' :)

все просто :)

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

11. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от Pahanivo email(ok) on 11-Мрт-10, 15:40 
>>Высшим же достижение считается завязать в узел так, что бы
>>никто не понял как ))
>
>ИМХО я не считаю что примерно сложный для понимания ;)
>всего 2 действия
>1. режиться на три части с помощью split'a (слово,слово и все остальное)
>
>2. выводиться все с ';' :)
>
>все просто :)

ненене, я не в коем разе не утверждаю что тут есть чтото сложно ))
все понятно и прозрачно

я собстна про "померятся лубят" ))

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от Andrey Mitrofanov on 11-Мрт-10, 13:26 
>|  awk '{$2 = $2";" ; print $0}'

Упс, сорри. Поторопился, не дочитал.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от Andrey Mitrofanov on 11-Мрт-10, 13:23 
>есть большой текстовый файл со строчками вида
>слово1 слово2 слово3 итд
>слово4 слово5 слово6 итд
>нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой

|awk '{$2=$2";";print}'

:) И нет перлом не проще -- его _учить надо, а он _стра-а-ашный_! :-P

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

12. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от Pahanivo email(ok) on 11-Мрт-10, 15:49 
>:) И нет перлом не проще -- его _учить надо, а он
>_стра-а-ашный_! :-P

Страааашна, аж жуть! (С)

Вот вам hand-made sed :)
Мож кто еще не знает:

#! /usr/bin/perl -w
#usage: ./script < scr_file > dst_file
while ($from_stdin_string = <>) {
  #some_regex with $from_stdin_string;
  #some_regex with $from_stdin_string;
  #some_regex with $from_stdin_string;
  ...
}

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

13. "добавить поле в середину строки при помощи sed или awk"  +/
Сообщение от Andrey (??) on 14-Мрт-10, 05:26 
интересная статья о разных алгоритмах использующихся для обработки регулярных выражений.
http://swtch.com/~rsc/regexp/regexp1.html
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру