* [Comm] awk question @ 2003-03-18 21:04 Vadim Vinichenko 2003-03-18 22:45 ` Olga 2003-03-20 22:20 ` [Comm] " Alexey Tourbin 0 siblings, 2 replies; 4+ messages in thread From: Vadim Vinichenko @ 2003-03-18 21:04 UTC (permalink / raw) To: community Уважаемые коллеги, Подскажите, пожалуйста, можно ли, используя awk (разделитель - пробел), заставить его считать подстроку в кавычках одним полем, независимо от наличия пробелов внутри. То есть, для: aaa bbb "ccc ddd eee" $3 должно быть равно "ccc ddd eee" (или ccc ddd eee, без кавычек). Я, собственно, разбираю лог веб-сервера, а там строка идентификации агента содержит пробелы. Что-то я не могу найти ответа на свой вопрос в документации. Или это уже не к awk? -- С уважением, Вадим ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Comm] awk question 2003-03-18 21:04 [Comm] awk question Vadim Vinichenko @ 2003-03-18 22:45 ` Olga 2003-03-19 20:02 ` Vadim Vinichenko 2003-03-20 22:20 ` [Comm] " Alexey Tourbin 1 sibling, 1 reply; 4+ messages in thread From: Olga @ 2003-03-18 22:45 UTC (permalink / raw) To: community Vadim Vinichenko <vnv@14000.ru> пишет: > Уважаемые коллеги, > > Подскажите, пожалуйста, можно ли, используя awk (разделитель - пробел), > заставить его считать подстроку в кавычках одним полем, независимо от > наличия пробелов внутри. То есть, для: > > aaa bbb "ccc ddd eee" > > $3 должно быть равно "ccc ddd eee" (или ccc ddd eee, без кавычек). > > Я, собственно, разбираю лог веб-сервера, а там строка идентификации > агента содержит пробелы. Что-то я не могу найти ответа на свой вопрос в > документации. Или это уже не к awk? Если нужны все поля, то можно выдрать из строки заковыченное и использовать отдельно (параллельно с оставшейся частью). Примерно так (ведь в логе, кажется, только одно заковыченное поле): {quot=$0; gsub("(.* \"|\" .*)", "", quot); gsub("\".*\"", ""); #собственно обработка quot и полей из $0 } заковыченное будет в переменной quot, остальное - в $0, которую можно анализировать как обычно. Ну а если нужно только заковыченное - проще переопределить разделитель: gawk -F \" 'Ваш скрипт' -- С уважением, (>|<) OL | ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Comm] awk question 2003-03-18 22:45 ` Olga @ 2003-03-19 20:02 ` Vadim Vinichenko 0 siblings, 0 replies; 4+ messages in thread From: Vadim Vinichenko @ 2003-03-19 20:02 UTC (permalink / raw) To: community Olga пишет: > Vadim Vinichenko <vnv@14000.ru> пишет: > > >>Уважаемые коллеги, >> >>Подскажите, пожалуйста, можно ли, используя awk (разделитель - пробел), >>заставить его считать подстроку в кавычках одним полем, независимо от >>наличия пробелов внутри. То есть, для: >> >>aaa bbb "ccc ddd eee" >> >>$3 должно быть равно "ccc ddd eee" (или ccc ddd eee, без кавычек). >> >>Я, собственно, разбираю лог веб-сервера, а там строка идентификации >>агента содержит пробелы. Что-то я не могу найти ответа на свой вопрос в >>документации. Или это уже не к awk? > > > Если нужны все поля, то можно выдрать из строки заковыченное и использовать > отдельно (параллельно с оставшейся частью). > Примерно так (ведь в логе, кажется, только одно заковыченное поле): > {quot=$0; gsub("(.* \"|\" .*)", "", quot); gsub("\".*\"", ""); > #собственно обработка quot и полей из $0 > } > заковыченное будет в переменной quot, остальное - в $0, которую можно > анализировать как обычно. Ольга, спасибо! Закавыченных полей там, правда, несколько, но Ваш пример все равно помог, поскольку поле агента стоит последним, а жадный regexp сожрал все вплоть до последней открывающей кавычки. > Ну а если нужно только заковыченное - проще переопределить разделитель: > gawk -F \" 'Ваш скрипт' Да. А если нужны и те, и другие, то можно еще сказать так: {split($0,myarray,"\""); # а потом использовать как обычные $n, так и myarray[n], # по крайней мере, если закавыченные поля не сбивают счет нужных # "обычных" полей, идущих за ними } <grumbling> Но вообще мне в awk'е не хватает той возможности, о которой я писал изначально - игнорировать разделители в закавыченной (или взятой в "скобки" из заданных символов) подстроке. Так бы оно было чище и прямее... Похоже, такого действительно нет:-( А еще не хватает функции под (условным) названием getsub(r, n [, t]), которая не замену бы выполняла (как sub'ы), и не возвращала позицию начала совпадения (как match), а возвращала бы саму совпадающую строку (n - чтобы вернуть n-ое совпадение). </grumbling> -- С уважением, Вадим ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Comm] Re: awk question 2003-03-18 21:04 [Comm] awk question Vadim Vinichenko 2003-03-18 22:45 ` Olga @ 2003-03-20 22:20 ` Alexey Tourbin 1 sibling, 0 replies; 4+ messages in thread From: Alexey Tourbin @ 2003-03-20 22:20 UTC (permalink / raw) To: community [-- Attachment #1: Type: text/plain, Size: 533 bytes --] On Wed, Mar 19, 2003 at 12:04:23AM +0300, Vadim Vinichenko wrote: > Уважаемые коллеги, > > Подскажите, пожалуйста, можно ли, используя awk (разделитель - пробел), > заставить его считать подстроку в кавычках одним полем, независимо от > наличия пробелов внутри. То есть, для: > > aaa bbb "ccc ddd eee" Если строка в кавычках всего одна, и, притом последняя -- попробуйте $ echo aaa bbb "ccc ddd eee" | while read a b c; do echo $c; done Вообще же, эта задача лучше решается в терминах "аргументов", а не "разделителей полей". [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2003-03-20 22:20 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2003-03-18 21:04 [Comm] awk question Vadim Vinichenko 2003-03-18 22:45 ` Olga 2003-03-19 20:02 ` Vadim Vinichenko 2003-03-20 22:20 ` [Comm] " Alexey Tourbin
ALT Linux Community general discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 community community/ http://lore.altlinux.org/community \ mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com public-inbox-index community Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.community AGPL code for this site: git clone https://public-inbox.org/public-inbox.git