Awk: получить несколько полей с разделителями между ними в виде строки - PullRequest
3 голосов
/ 01 марта 2012

Мне любопытно, можно ли с помощью awk получить не только изолированные поля, но и часть исходной строки, которая содержит несколько смежных полей и вложенных разделителей?

Например, при использованииawk на

foo.bar.baz.test

с разделителем '.' и сообщая awk для извлечения полей 2 и 3, я хочу иметь возможность автоматически получать

bar.baz

.Я знаю, что могу потом заново построить часть строки вручную, но это просто не так.

Идеи?

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Я не очень уверен, если это то, что вы хотите:

kent$  echo "foo.bar.baz.test"|awk  'BEGIN{FS=OFS="."}{print $2,$3}'
bar.baz

РЕДАКТИРОВАТЬ

Мне нужно обобщить его на неизвестное числополя (без жесткого кодирования $ 2, $ 3, но все, начиная от $ 2 до конца - это возможно?)

см. тест ниже:

kent$  echo "a.b.c.d.e.f.g.h.j.foo.bar"|awk 'BEGIN{FS=OFS="."}{for(i=2;i<=NF;i++)s=i==NF?s $i:s $i OFS;print s}'
b.c.d.e.f.g.h.j.foo.bar
2 голосов
/ 01 марта 2012

Это может работать для вас:

echo foo.bar.baz.test | awk -F. -vOFS=. '{print $2,$3}'
bar.baz

, в команде печати является сокращением для разделителя полей вывода (OFS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...