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

Исходное сообщение
"Помогите разобратся с awk"

Отправлено Kreept , 20-Июн-07 19:42 
Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print одинарные кавычки?
awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file

"/" - не помог
Спасибо за любую помощь.  


Содержание

Сообщения в этом обсуждении
"Помогите разобратся с awk"
Отправлено NuINu , 21-Июн-07 09:37 
>Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print
>одинарные кавычки?
>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>
>"/" - не помог
>Спасибо за любую помощь.

gawk  'BEGIN {print " \047Name\047--------------"} {print $1 "\t" $7}' file


"Помогите разобратся с awk"
Отправлено Kreept , 21-Июн-07 11:11 
>>Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print
>>одинарные кавычки?
>>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>>
>>"/" - не помог
>>Спасибо за любую помощь.
>
>gawk  'BEGIN {print " \047Name\047--------------"} {print $1 "\t" $7}' file


Спасибо!  


"Помогите разобратся с awk"
Отправлено madskull , 26-Июн-07 10:58 
>Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print
>одинарные кавычки?
>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>
>"/" - не помог
>Спасибо за любую помощь.

если используется bash, то можно нагородить и что-то вроде этого:
awk -F: 'BEGIN {print " '"'"'Name'"'"'--------------"} {print $1 "\t" $7}' file


"Помогите разобратся с awk"
Отправлено zbl , 26-Июн-07 15:19 
>Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print
>одинарные кавычки?
>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>
>"/" - не помог
В bash между ' ' никак не может стоять ', даже экранировать его слешем нельзя.
Для вывода ' в bash предлагается использовать "".
Но тогда придётся писать
awk -F: "BEGIN {print \" 'Name'--------------\"} {print $1 \"\t\" $7}" file
что мне лично не нравится.
Если помнить список специальных последовательностей, то можно писать так:
awk -F: $'BEGIN {print " \'Name\'--------------"} {print $1 "\t" $7}' file
Но здесь bash вместо \t подставит табуляцию.
awk понимает \t тоже как табуляцию, поэтому проблемы не будет (если ширина табуляции не важна).
Но, если табуляцию должен подставлять именно awk, а не besh, то нужно писать
awk -F: $'BEGIN {print " \'Name\'--------------"} {print $1 "\\t" $7}' file

"Помогите разобратся с awk"
Отправлено perece , 26-Июн-07 16:59 
>>Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print
>>одинарные кавычки?
>>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>>
>>"/" - не помог
>В bash между ' ' никак не может стоять ', даже экранировать
>его слешем нельзя.
неправда ваша. конструкция <одинарнаязакрылась><экранированаяодинарная><одинарнаяоткрылась> на ура работает (выглядит как '\'')

\^P^/


"Помогите разобратся с awk"
Отправлено Kreept , 26-Июн-07 17:52 
>неправда ваша. конструкция <одинарнаязакрылась><экранированаяодинарная><одинарнаяоткрылась> на ура работает (выглядит как '\'')
>
>\^P^/

Я никак не смог экранировать ',  только с помощью  \047 или как описал zbl.


"Помогите разобратся с awk"
Отправлено zbl , 29-Июн-07 16:19 
>>В bash между ' ' никак не может стоять ', даже экранировать
>>его слешем нельзя.
>неправда ваша. конструкция <одинарнаязакрылась><экранированаяодинарная><одинарнаяоткрылась> на ура работает (выглядит как '\'')
Типа
bash$ echo '\''
да?


"Помогите разобратся с awk"
Отправлено perece , 04-Июл-07 15:33 
>>>В bash между ' ' никак не может стоять ', даже экранировать
>>>его слешем нельзя.
>>неправда ваша. конструкция <одинарнаязакрылась><экранированаяодинарная><одинарнаяоткрылась> на ура работает (выглядит как '\'')
>Типа
>bash$ echo '\''
>да?
нет. типа
bash$ echo 'слово1'\''слово2'
слово1'слово2
bash$

\^P^/


"Помогите разобратся с awk"
Отправлено zbl , 07-Июл-07 17:19 
>нет. типа
>bash$ echo 'слово1'\''слово2'
>слово1'слово2
>bash$
А-а, ясно:
bash$ echo \'\*\'

"Помогите разобратся с awk"
Отправлено makkon , 05-Ноя-07 19:16 
Дабы не засорять...
Вобщем ломаю голову.
Есть строки, количество полей в каждой варируется

Нужно вытащить первый, второй и (!!!внимание!!!) переменный столбец каждой строки.
Известно только то, что переменный столбец начинается и заканчивается на [ и ] соответственно. Возможный вариант решения задачи у меня есть, подправьте знающие:

awk '{for (i=3;i<=NF;i++)
if(?????) then print ($1 $2 $i)}' /home/text.txt
я так себе предполагаю конструкци, но не знаю, как записать правильно фразу: если столбец содержит/начинается/заканчивается символами [ или ], то его на печать

ПС, если синтаксис у меня запорот, подправьте тоже=(
Спасибо


"Помогите разобратся с awk"
Отправлено phpcoder , 05-Ноя-07 19:51 
[...]
>awk '{for (i=3;i<=NF;i++)
> if(?????) then print ($1 $2 $i)}' /home/text.txt
>я так себе предполагаю конструкци, но не знаю, как записать правильно фразу:
>если столбец содержит/начинается/заканчивается символами [ или ], то его на печать

if($i~/^\[.*\]$/) {...}


"Помогите разобратся с awk"
Отправлено makkon , 05-Ноя-07 23:05 
>[...]
>>awk '{for (i=3;i<=NF;i++)
>> if(?????) then print ($1 $2 $i)}' /home/text.txt
>>я так себе предполагаю конструкци, но не знаю, как записать правильно фразу:
>>если столбец содержит/начинается/заканчивается символами [ или ], то его на печать
>
>if($i~/^\[.*\]$/) {...}

хм, набираю в командной строке консоли следующую строку:
awk '{for (i=3;i<=NF;i++) if($i~/^\[.*\]$/) {print ($1 $2 $i)}}' /home/text.txt
и виснет(( что неправильно тут подскажите пожалуйста?

from=<blabla@bla.co.za>, size=0, class=0, nrcpts=0, proto=SMTP, daemon=MTA, relay=140-17-19-33.res.net [140-17-19-33]
пример строки. Поидее результат команды должен выдать

from=<blabla@bla.co.za>, size=0, [140-17-19-33]


"Помогите разобратся с awk"
Отправлено phpcoder , 05-Ноя-07 23:14 
[...]
>хм, набираю в командной строке консоли следующую строку:
>awk '{for (i=3;i<=NF;i++) if($i~/^\[.*\]$/) {print ($1 $2 $i)}}' /home/text.txt
>и виснет(( что неправильно тут подскажите пожалуйста?

У меня так и выдаёт:

[c0der@rock ~]$ echo "from=<blabla@bla.co.za>, size=0, class=0, nrcpts=0, proto=SMTP, daemon=MTA, relay=140-17-19-33.res.net [140-17-19-33]" | awk '{for (i=3;i<=NF;i++) if($i~/^\[.*\]$/) {print ($1 $2 $i)}}'
from=<blabla@bla.co.za>,size=0,[140-17-19-33]



"Помогите разобратся с awk"
Отправлено makkon , 06-Ноя-07 00:53 
>У меня так и выдаёт:
>
>[c0der@rock ~]$ echo "from=<blabla@bla.co.za>, size=0, class=0, nrcpts=0, proto=SMTP, daemon=MTA, relay=140-17-19-33.res.net [140-17-19-33]" | awk '{for (i=3;i<=NF;i++) if($i~/^\[.*\]$/) {print ($1 $2 $i)}}'
>from=<blabla@bla.co.za>,size=0,[140-17-19-33]

Хм, странно, запустил без изменений еще раз и сработало=)
Спасибо большое за подсказку.

Раз уж добрые люди сужествуют, то например, как мне сделать так, чтобы из
blabla@bla.co.za  size=0  [140-17-19-33]
получилось
blabla@bla.co.za  0  [140-17-19-33]
спасибо


"Помогите разобратся с awk"
Отправлено phpcoder , 06-Ноя-07 11:17 
[...]
>Раз уж добрые люди сужествуют, то например, как мне сделать так, чтобы

Вариантов масса:

[c0der@rock ~]$ echo "size=0" | awk '{print strtonum($0)}'
0
[c0der@rock ~]$ echo "size=0" | awk '{printf("%d\n", $0)}'
0
[c0der@rock ~]$ echo "size=0" | awk '{gsub("^size=", ""); print}'
0


"Помогите разобратся с awk"
Отправлено makkon , 06-Ноя-07 13:35 

>0
>[c0der@rock ~]$ echo "size=0" | awk '{gsub("^size=", ""); print}'

за этот вариант отдельное спасибо


"Помогите разобратся с awk"
Отправлено zbl , 04-Дек-07 09:36 
>
>>0
>>[c0der@rock ~]$ echo "size=0" | awk '{gsub("^size=", ""); print}'
>
>за этот вариант отдельное спасибо

bash$ echo size=0 | sed 's/^size=//'
Для простейших операций sed больше подходит, ибо чуть шустрее, чем awk.


"Помогите разобратся с awk"
Отправлено phpcoder , 04-Дек-07 09:41 
[...]
>Для простейших операций sed больше подходит, ибо чуть шустрее, чем awk.

Когда-то я читал, что как раз awk быстрее :)

Хотя сейчас нагуглил обратное:

""По скорости выполнения sed [...] заметно быстрее чем AWK." (c) http://ru.wikipedia.org/wiki/Sed

Интересно..


"Помогите разобратся с awk"
Отправлено zbl , 06-Дек-07 15:20 
>Когда-то я читал, что как раз awk быстрее :)
>
>Хотя сейчас нагуглил обратное:

А я всегда в таких случаях упоминаю NFL теорему: если в данной задаче алгоритм A работает быстрее алгоритма B, то всегда найдётся задача, в которой алгоритм B работает быстрее алгоритма A.