私はLinuxマシン上で巨大なプレーンテキストファイル(〜500Gb)を持っています。私は、ヘッダー行(ファイルの最初の行)のいくつかの文字列を置き換えるが、私が知っているすべてのメソッドが遅く、効率が低いようだ。Linuxのコマンドラインで巨大なファイルの最初の行の文字列を置換する最速の方法は?
例ファイル:
foo apple cat
1 2 2
2 3 4
3 4 6
...
予想ファイル出力:をsedの
bar apple cat
1 2 2
2 3 4
3 4 6
...
:
sed -i '1s/foo/bar/g' file
-i
缶Cファイルを置き換えますが、このコマンドはディスク上にtmpファイルを生成し、tmpファイルを使用して元のファイルを置き換えます。 ioの無駄な時間。
vimの:
ex -c '1s/foo/bar/g' -c 'wq' file
Vimはtmpファイルを生成しませんが、このツールは、メモリへの全体ファイルをロードする、のいずれかに多くの時間を無駄にしています。
最初の行だけをメモリに読み込んで元のファイルに書き戻すより良い解決策がありますか?私はLinuxのhead
コマンドが最初の列を非常に高速に抽出できることを知っていました。
質問入力にサンプル入力と希望する出力を追加してください。 – Cyrus
これは、 'foo'と' bar'が同じ長さ(バイト単位)である場合にのみ行うことができます。それ以外の場合は、ファイル全体を書き換えることが唯一の選択肢です(ただし、ツールが十分スマートな場合はインプレースで実行できます)。 – Thomas
@cyrus例を追加しました。 –