Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print одинарные кавычки?
awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file"/" - не помог
Спасибо за любую помощь.
>Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print
>одинарные кавычки?
>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>
>"/" - не помог
>Спасибо за любую помощь.gawk 'BEGIN {print " \047Name\047--------------"} {print $1 "\t" $7}' file
>>Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print
>>одинарные кавычки?
>>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>>
>>"/" - не помог
>>Спасибо за любую помощь.
>
>gawk 'BEGIN {print " \047Name\047--------------"} {print $1 "\t" $7}' file
Спасибо!
>Здравствуйте, возникла проблема как с помощью утилиты awk записать в сценарий print
>одинарные кавычки?
>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>
>"/" - не помог
>Спасибо за любую помощь.если используется bash, то можно нагородить и что-то вроде этого:
awk -F: 'BEGIN {print " '"'"'Name'"'"'--------------"} {print $1 "\t" $7}' file
>Здравствуйте, возникла проблема как с помощью утилиты 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 записать в сценарий print
>>одинарные кавычки?
>>awk -F: 'BEGIN {print " 'Name'--------------"} {print $1 "\t" $7}' file
>>
>>"/" - не помог
>В bash между ' ' никак не может стоять ', даже экранировать
>его слешем нельзя.
неправда ваша. конструкция <одинарнаязакрылась><экранированаяодинарная><одинарнаяоткрылась> на ура работает (выглядит как '\'')\^P^/
>неправда ваша. конструкция <одинарнаязакрылась><экранированаяодинарная><одинарнаяоткрылась> на ура работает (выглядит как '\'')
>
>\^P^/Я никак не смог экранировать ', только с помощью \047 или как описал zbl.
>>В bash между ' ' никак не может стоять ', даже экранировать
>>его слешем нельзя.
>неправда ваша. конструкция <одинарнаязакрылась><экранированаяодинарная><одинарнаяоткрылась> на ура работает (выглядит как '\'')
Типа
bash$ echo '\''
да?
>>>В bash между ' ' никак не может стоять ', даже экранировать
>>>его слешем нельзя.
>>неправда ваша. конструкция <одинарнаязакрылась><экранированаяодинарная><одинарнаяоткрылась> на ура работает (выглядит как '\'')
>Типа
>bash$ echo '\''
>да?
нет. типа
bash$ echo 'слово1'\''слово2'
слово1'слово2
bash$\^P^/
>нет. типа
>bash$ echo 'слово1'\''слово2'
>слово1'слово2
>bash$
А-а, ясно:
bash$ echo \'\*\'
Дабы не засорять...
Вобщем ломаю голову.
Есть строки, количество полей в каждой варируетсяНужно вытащить первый, второй и (!!!внимание!!!) переменный столбец каждой строки.
Известно только то, что переменный столбец начинается и заканчивается на [ и ] соответственно. Возможный вариант решения задачи у меня есть, подправьте знающие:awk '{for (i=3;i<=NF;i++)
if(?????) then print ($1 $2 $i)}' /home/text.txt
я так себе предполагаю конструкци, но не знаю, как записать правильно фразу: если столбец содержит/начинается/заканчивается символами [ или ], то его на печатьПС, если синтаксис у меня запорот, подправьте тоже=(
Спасибо
[...]
>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(?????) 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 '{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]
>У меня так и выдаёт:
>
>[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]
спасибо
[...]
>Раз уж добрые люди сужествуют, то например, как мне сделать так, чтобыВариантов масса:
[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
>0
>[c0der@rock ~]$ echo "size=0" | awk '{gsub("^size=", ""); print}'за этот вариант отдельное спасибо
>
>>0
>>[c0der@rock ~]$ echo "size=0" | awk '{gsub("^size=", ""); print}'
>
>за этот вариант отдельное спасибоbash$ echo size=0 | sed 's/^size=//'
Для простейших операций sed больше подходит, ибо чуть шустрее, чем awk.
[...]
>Для простейших операций sed больше подходит, ибо чуть шустрее, чем awk.Когда-то я читал, что как раз awk быстрее :)
Хотя сейчас нагуглил обратное:
""По скорости выполнения sed [...] заметно быстрее чем AWK." (c) http://ru.wikipedia.org/wiki/Sed
Интересно..
>Когда-то я читал, что как раз awk быстрее :)
>
>Хотя сейчас нагуглил обратное:А я всегда в таких случаях упоминаю NFL теорему: если в данной задаче алгоритм A работает быстрее алгоритма B, то всегда найдётся задача, в которой алгоритм B работает быстрее алгоритма A.