Как получить значения индекса для нескольких совпадений в одной строке в awk?

Я знаю следующее выражение:

echo "bob alice robert alice" | awk '{print index($0,"alice")}' 5 

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

 echo "bob alice robert alice" | awk 'unknown magic' 5:18 

3 Solutions collect form web for “Как получить значения индекса для нескольких совпадений в одной строке в awk?”

С инструментами POSIX:

 echo "bob alice robert alice"| p=alice awk ' { while(1) { $0 = substr($0, RSTART+RLENGTH) match($0, ENVIRON["p"]) if (RSTART == 0) break i = i ? i+RSTART+RLENGTH-1 : RSTART print i } }' | paste -sd: - 5:18 

Это должно сделать вашу работу:

 echo "bob alice robert alice" |\ awk '{ s=$0 o=0 m="alice" l=length(m) i=index(s,m) while (i>0) { o+=i print o s=substr(s,i+l) o+=l-1 i=index(s,m) } }' 

Для форматирования с помощью:: (двоеточие) вы можете

 paste -s |tr '\t' ':' 
 echo "bob alice robert alice"| awk ' {for( i=1;i<=NF;i++) { if ( $i == "alice") { printf index($0,"alice") ":" gsub("alice","xxxxx",$i) } } print " " }' 
  • Существуют ли версии Unix, которые не имеют awk при установке по умолчанию?
  • Как я могу сопоставить строку, когда ей не предшествует цифра с помощью awk?
  • awk Command Loop
  • Как эхо экранировать экранированную строку
  • Точная разница между данными строк в двух файлах в Linux
  • Как извлечь подмаски из строки и записать их в файл?
  • извлекать часть текста из всех совпадающих строк
  • замените пустое значение на предыдущее значение первого столбца, используя awk и sed
  • Разделите элементы столбца на столбец с одним элементом
  • Заменить текст многострочным шаблоном
  • awk + как захватить адрес электронной почты между символами
  • Исключить строки, которые имеют менее 23 столбцов
  • Linux и Unix - лучшая ОС в мире.