巨大な(70GB)1行のテキストファイルがあり、その中の文字列(トークン)を置き換えたいと思います。token <unk>
を別のダミートークンに置き換えたい(グローブの問題)。
私が試したsed
:
sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
しかし、出力ファイルにcorpus.txt.new
はゼロバイトがあります!
私もperlを使ってみました:
perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
しかし、メモリ不足エラーが発生しました。
小さいファイルの場合、上記の両方のコマンドが機能します。
そのようなファイルである文字列を置き換えるにはどうすればよいですか? これは関連した質問ですが、答えはどれもうまくいきませんでした。
編集:ファイルを10GBのチャンク(または何でも)に分割し、それぞれに適用sed
してからマージするのはcat
どうですか?それは理にかなっていますか?よりエレガントなソリューションはありますか?
split
て-b
オプションがバイト単位でチャンクファイルのサイズを定義します。それぞれを順番に処理sed
し、再構築します。そこリスクはそれがされている<unk>
2つのファイルに分割することができると...見つかりません