Работа с шаблоном соответствия строки awk - PullRequest
0 голосов
/ 14 января 2019

Инструмент awk имеет соответствие шаблону линии как

/pattern/ { statements; }

Есть ли способ получить строку pattern в качестве переменной для использования в match выражениях и т. Д.?

Или, что еще лучше, сразу получите:

  • текстовый шаблон
  • шаблон соответствует длине
  • соответствует группам, если в шаблоне есть (groups)

в блоке {statements}?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Если вы используете GNU awk и вместо /pattern/ в условной части используйте match и третий аргумент match(string, regexp [, array]), вы получите доступ к сопоставленному тексту, начальному индексу, длине и группам:

$ echo foobar | 
gawk 'match($0, /(fo*)(b.*)/, a) {
    print a[0],a[0,"start"],a[0,"length"]    # 0 index refers to whole matched text
    print a[2],a[2,"start"],a[2,"length"]    # 1, 2, etc. to matched groups
}'
foobar 1 6
bar 4 3

Подробнее см. GNU awk для match.

0 голосов
/ 14 января 2019

Не могли бы вы попробовать следующие.

1-й: для получения соответствующего текста match - ЛУЧШИЙ вариант.

awk 'match($0,/regex/){print substr($0,RSTART,RLENGTH)}'  Input_file

2-й: Чтобы получить длину совпадающей строки:

awk 'match($0,/regex/){print RLENGTH}'  Input_file

3-й: чтобы получить все сопоставленные образцы, используйте цикл while с соответствием до совпадения, найденного в строке, и мы должны получить все сопоставленные образцы.

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