大きなテキストファイルの最初の行を編集する


16

巨大なテキストファイルがあり、すべてをメモリにページングするには大きすぎます。このテキストファイルで必要なのは、最初の行を編集することだけです(CSVファイルで、タイトルを変更する必要があります)。

bashでこれを行う簡単な方法はありますか?


テキストエディターを使用できない理由はありますか?
ダンフ

ファイルが大きすぎるため、このマシンの最大仮想メモリの20倍を超えています。
リンクス

1
けっこうだ。優れたテキストエディターは、必要な分だけメモリに読み込むため、非常に大きなファイルを処理できるという印象を受けましたが、他のいくつかの質問を読んだ後、それらのほとんどに問題があるようです。
ダンフ

@dangph True ...は奇妙かもしれませんが、edlinms-dosやedUnix などのいくつかの古くて時代遅れの「テキストエディタ」(またはいわゆる)は、この問題を抱えていないようでしたが、行エディタのみ...これらの時間は希少で貴重なものであり、ギガバイト単位のファイルサイズは信じられないほどのものでした!;)
ローレント

物事を明確にするために;):私はお見逃しなくed!!! それは、この場合(必ずそれがこのサイズのファイルを扱うことができない...)でぴったりでしょう
ローラン

回答:


21

あなたは使用することができlessますが、編集して使用したいものを見るためにsed変更を加えること。これにより、ファイル全体をロードせずに編集できます。

別の方法は、ファイルを分割し、編集して再度結合することです。

split -b 10000k <file>

and to join:

cat xa* > <file>

sedへの賛成票。
アトローン

ファンタスティック、スプリット、およびジョインはまさに私が探していたものでした。
リンクス

確かに、sedはファイル全体を簡単に検索/置換できるので優れていますが、最初の行を変更するだけでよい場合、分割も悪くなく高速です。
ローレント

4
sedはファイル全体(TBの半分以下)を実行するのに何時間もかかり、変更は最初の行にのみあり、分割するのが賢明なようです。
リンクス

3

変更により行の長さが変更された場合、ファイル全体を書き換える必要があります。たとえば、SO に関するこの説明を参照してください。おそらく、データをデータベースに保存することを検討する必要があります。

それを念頭に置いて、sedでファイルをストリーム編集できます。最初の行を置き換えるには、次のようにします(GNU sed):

< oldfile sed '1c\new_heading' > newfile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.