非常に大きなファイルの文字列を置き換える

非常に大きなファイルの文字列を置き換える

区切り文字のない次の形式の長い一連のURLがあります。

http://example.comhttp://example.nethttp://example.orghttp://etc...

各URLをラップしたいです。私はsedを使って "http://"のすべてのインスタンスを "\nhttp://"に置き換えることによってこれをやろうとしています。

sed 's_http://_\nhttp://_g' urls.txt

ただし、分割エラー(メモリ違反)が発生します。ファイルの絶対サイズ(100 GB以上)のため、sedがいくつかの制限を超えたと推測できます。

処理のためにファイルを複数の小さなファイルに分割できますが、「http://」のすべてのインスタンスはそのまま残す必要があります。

もっと良い方法がありますか?

ベストアンサー1

これにより、awk一度に大量のテキストを読み取ることを回避できます。

awk -vRS='http://' -vORS='\nhttp://' 1 urls.txt > urlsperline.txt

成功するかどうかは、使用されている実装によって異なりますawk。たとえば、うまくgawk動作しますが、mawk競合が発生します。

おすすめ記事