テキストファイルの定義済みの各単語に増分数を追加するにはどうすればよいですか?

テキストファイルの定義済みの各単語に増分数を追加するにはどうすればよいですか?

テキストファイルの定義済みの各単語に増分数を追加するにはどうすればよいですか?

この質問と同じです。 テキストファイルの各行に増分数を追加するには?

テキストファイルにデルタカウントを追加したいです。しかし、各行に増分数を追加する代わりに、事前定義された単語に増分数を追加したいと思います。

たとえば、テキストから「cinema」という単語を計算するには、「cinema」のすべての項目を「cinemaN」に変更したいとします。ここで、Nは増分数で、Nの最大値は発生回数によって異なります。 「映画」がテキストに表示される場合は、「映画」という単語が使用された回数です。

したがって、入力テキストファイルには次のテキストが含まれます。

彼は映画館で運転した。それから彼は映画館に入って切符を買ったが、後で知ってみたら最後に映画館に行って2年を超えました。

次の内容を含む出力ファイルを生成します。

彼は映画館で運転しました1。後で彼はチケットを買うために映画館に入り、後で映画館に最後に行って2年を超えたことを知りました。

好ましくは、選択した単語に逆順で番号を付けることができることを願っている。

つまり、次の内容を含む2番目の出力ファイルが生成されます。

彼は映画館に車を運転して行った3。後で彼はチケットを買うために映画館に入り、後で映画館に最後に行って2年を超えたことを知りました。

ベストアンサー1

私はperlこれを好む:

$ cat ip.txt 
He drove his car to the cinema. He then went inside the cinema to purchase tickets, and afterwards discovered that it was more then two years since he last visited the cinema.

$ # forward counting is easy
$ perl -pe 's/\bcinema\b/$&.++$i/ge' ip.txt 
He drove his car to the cinema1. He then went inside the cinema2 to purchase tickets, and afterwards discovered that it was more then two years since he last visited the cinema3.
  • \bcinema\b検索する単語は、他の単語の一部と一致しないように単語境界を使用します。たとえば、\bpar\b一致しない、apartまたはparkspar
  • geこのgフラグはグローバル交換に使用されます。ePerlコードを代替セクションで使用できるようにする
  • $&.++$i一致語と事前に増加した値を連結したものです。$iデフォルト値は次のとおりです。0


逆に、まずカウントを取得する必要があります...

$ c=$(grep -ow 'cinema' ip.txt | wc -l) perl -pe 's/\bcinema\b/$&.$ENV{c}--/ge' ip.txt 
He drove his car to the cinema3. He then went inside the cinema2 to purchase tickets, and afterwards discovered that it was more then two years since he last visited the cinema1.
  • cハッシュ経由でアクセスできる環境変数になります。%ENV

または、perlファイル全体を単独で使用します。

perl -0777 -pe '$c=()=/\bcinema\b/g; s//$&.$c--/ge' ip.txt 

おすすめ記事