マスキングの問題:大きなテキストファイル(input.txt、100+)から特定の用語(単語/表現)を見つけてマスクするMB)。見つけ出す必要のある用語(10K +)は、単一のファイル(to_mask.txt)に保存されます。効率的にこれを実行するにはどうすればよいですか?大きいファイルからの検索と置換
私は2つの段階でこれをやって考えていた:最初の実際
grep -Ff to_mask.txt -o -n input.txt
次の出力を通過し、実際の交換(用語 - >「XXX」)を行う条件を含む行を検索します。
これはちょっと面倒なようですが、スマートなやり方でできますか?
基本コマンド(grep、sed、awk、one-line-perl)の任意の組み合わせが歓迎です!
UPDATE:
マルコス、Kenavoz、エド・モートンとSobriqueすべてが、おかげで作業溶液を与えました! Sobriqueのソリューションは、私の受け入れられたソリューションとして選択しました。これは、私のデータが与えられた残りの部分よりもはるかに高速だったからです。いくつかの特別なケースは扱えないかもしれませんが、私はそれを可能にすることができると確信していますし、現在の状況で仕事をしています。
アップデート2:参考
、ここKenavozが提供するソリューションです:
sed -f <(sed 's~^~s\~~;s~$~\~XXX\~~' to_mask.txt) input.txt
を1つ以上のライナーでこの問題にアプローチします(特に、他のエンドユーザーが関与している場合)。また、マスクのフィルタリングは、多くの場合、0 b 5 C u r 1 + yで周回することが多く、コンピュータが見つけにくいのに対し、人間は読むことができる傾向があります。 –
ありがとう@スローンを描く、私は多少スパムの問題に精通しています。しかし、私は、できるだけ少数のライブラリ(これはクライアントの側で実行される)でこれを実装する必要があるので、単純化のために効率を少し失うことがあります。 – vivasra