インデックスで指定された2つの単語間のテキストを取得するには?

インデックスで指定された2つの単語間のテキストを取得するには?

awkを使用すると、次のようにインデックス付きの単語を印刷できます。

$ echo "The quick brown fox jumps over the lazy dog" | awk  '{print $3, $7}'
brown the

しかし、指定された単語 "brown"と "the"の間にあるテキストもインポートしたいと思います。だから私は出力が次のようになりたいと思います。

brown fox jumps over the

特にawkを使用する必要はありませんが、単語の索引付けとトークン化は、awkを使用する残りのシェルスクリプトと一貫性を保つためにawkと一致する必要があります。

最初のインデックスから最後のインデックスまで単語を印刷することを検討しましたが、単語間のスペースは保持されません。

複雑ですが、より正確に表現するために、インデックスで指定された特定の単語の先頭から始まり、別のインデックスで指定された別の単語の終わりで終わるテキストを取得したいと思います。これをどのように達成できますか(好ましくはbashループなし)。

ベストアンサー1

Passをgawk使用すると、このsplit()関数を使用してフィールドとその区切り文字を決定できます。

$ echo "The quick brown fox   jumps over the lazy dog" | awk '{ split($0, a, "\\s+", s); for (i = 3; i <= 7 && i <= length(a); i++) printf "%s%s", a[i], (i < 7 ? s[i] : "\n") }'
brown fox   jumps over the

おすすめ記事