2015-12-21 2 views
-1
$ echo foooobazbarrrrr | 
> gawk 'match($0, /(fo+).+(bar*)/, arr) 
>   {print arr[1], arr[2] }' 

Выход этого кода должен быть foooo barrrr, но на моем Ubuntu он не работает и не работает.Почему моя строка awk не работает?

Если бы я писал этот код

> gawk 'match($0, /(fo+).+(bar*)/) 
>   {print }' 

Затем его работу. Почему первая версия не работает?

+0

Это (с первой попытки) прямо из руководства пользователя gawk и работает отлично. – Mithrandir

+0

Я отредактировал ваше сообщение, чтобы попытаться показать, что вы действительно набрали свой терминал. Измените свой вопрос, чтобы показать, какая команда awk была напечатана при каждой попытке. –

+2

Когда я запустил команду на своем сервере Ubuntu, она напечатала 'foooo barrrr', как и ожидалось. Я подозреваю, что ваша проблема связана с дополнительным прерыванием строки, добавленным к середине команды awk. –

ответ

1

Ваша команда немного отличается от примера в GNU manual. Он имеет открытие { в самом начале, так что нет совпадения шаблона, и новая строка требуется для разделения двух awk-комманд.

$ echo foooobazbarrrrr | gawk '{ match($0, /(fo+).+(bar*)/, arr) 
> print arr[1], arr[2] }' 
foooo barrrrr 

В качестве альтернативы, вы можете использовать точку с запятой вместо символа новой строки, чтобы отделить команды:

$ echo foooobazbarrrrr | gawk '{ match($0, /(fo+).+(bar*)/, arr); print arr[1], arr[2] }' 
foooo barrrrr 

Ваша версия команды будет работать, если он вошел в одну строку:

$ echo foooobazbarrrrr | gawk 'match($0, /(fo+).+(bar*)/, arr) {print arr[1], arr[2] }' 
foooo barrrrr 
Смежные вопросы