Часть строки средствами awk

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Часть строки средствами awk

Сообщение serzh-z »

Потребовалось вырезать кусок строки в bash, и в очередной раз возник вопрос - верно ли я понимаю, что awk не умеет такое?

Т.е. мне хотелось бы из строки mpc, скажем "#52) home/serzh/music/NUMBREED/danny howells_NUBREED 002/cd 2/01 16b - escape.mp3", получить номер 52. Возможно ли это сделать без sed, одним лишь awk или же он не умеет захватывать кусок строки в переменную как, скажем, Perl?
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Часть строки средствами awk

Сообщение elide »

верно ли я понимаю, что awk не умеет такое?
не верно.

Код: Выделить всё

elide@rebirth| ~ >> echo '#52) home/serzh/music/NUMBREED/danny howells_NUBREED 002/cd 2/01 16b - escape.mp3' | awk -F'[#)]' '{print $2}'
52
elide@rebirth| ~ >>
говорят, иногда бывает полезно читать man...
слава роботам!
Спасибо сказали:
Аватара пользователя
Bolverk
Бывший модератор
Сообщения: 1571
ОС: Cygwin

Re: Часть строки средствами awk

Сообщение Bolverk »

cut покрути
Спасибо сказали:
Аватара пользователя
Бодрый и Веселый
Сообщения: 66
ОС: What?

Re: Часть строки средствами awk

Сообщение Бодрый и Веселый »

offtopic:
awk умеет всякое и его синтаксис адски похож на чистый C. Вот, например, интерпретатор lisp на awk.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Часть строки средствами awk

Сообщение serzh-z »

elide писал(а):
14.01.2007 01:03
верно ли я понимаю, что awk не умеет такое?
не верно.

Код: Выделить всё

elide@rebirth| ~ >> echo '#52) home/serzh/music/NUMBREED/danny howells_NUBREED 002/cd 2/01 16b - escape.mp3' | awk -F'[#)]' '{print $2}'
52
elide@rebirth| ~ >>
говорят, иногда бывает полезно читать man...
Нэ повэришь... Читаю иногда. Но там ни слова нет про доступ к захваченным участкам регэкспа. Ты привел не совсем то. Оно будет работать, но вопрос не в том, как решить частный случай, который я привел - его я и седом уже решил - меня интересовало примерно следующее, как в Перле: "$1 ~ /^#\d+\).*$/ print $reg1",.. Возможно ли такое в awk - судя по приведенным ответам и факам - увы, нет.

P.S.: упс, прошу прощения, изначальный вопрос поставил криво - т.е. на деле интересовало не решение частного случая для MPD, именно возможность захвата куска строки через регекспы примерно, как в Перле.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Часть строки средствами awk

Сообщение elide »

Код: Выделить всё

elide@rebirth| ~ >> echo '#52) home/serzh.....mp3' | awk  '{ if(match($0, /#([0-9]+)\)/ ,a)) print a[1] }'
52
elide@rebirth| ~ >>
слава роботам!
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Часть строки средствами awk

Сообщение serzh-z »

elide, сэнкс - именно это я хотел узнать, но не мог найти.
Спасибо сказали: