awkの同じ行から複数​​の一致するインデックス値を取得するには?

awkの同じ行から複数​​の一致するインデックス値を取得するには?

私は次の表現を知っています。

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

最初のアリスと一致するインデックスが出力されます。一致するすべてのインデックスを取得する方法はありますか? 、例えば:

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

ベストアンサー1

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

おすすめ記事