From: Vadim Vinichenko <vnv@14000.ru> To: community@altlinux.ru Subject: Re: [Comm] awk question Date: Wed, 19 Mar 2003 23:02:56 +0300 Message-ID: <3E78CCF0.8000508@14000.ru> (raw) In-Reply-To: <20030319054529.59917b05.laedel@pochtamt.ru> 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> -- С уважением, Вадим
next prev parent reply other threads:[~2003-03-19 20:02 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2003-03-18 21:04 Vadim Vinichenko 2003-03-18 22:45 ` Olga 2003-03-19 20:02 ` Vadim Vinichenko [this message] 2003-03-20 22:20 ` [Comm] " Alexey Tourbin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=3E78CCF0.8000508@14000.ru \ --to=vnv@14000.ru \ --cc=community@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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