非常に大きなファイルから行を削除する簡単な方法

非常に大きなファイルから行を削除する簡単な方法

67GB .csvファイルがあります(わかりました...わかりました...)

ファイルが破損しているため、ファイルから4,125,878行を削除する必要があります。私のCSVパースツールはそれを無視したりスキップしたりしません。

できるsed次のようなことをしました。

sed '4125878d' in.csv > out.csv

しかし、これは時間とディスクスペースの面で非常に高価な作業です。

を使用すると、sed -i '4125878d' in.csv作業に時間がかかります。

私ができる方法はありませんか?早く大容量ファイルの途中から行を削除しますか?

答え1

私はそうではないと信じています。

sedまたは他のプログラムが一時ファイルを使用するのではなく、変更を適用するのに十分賢い場合でも、削除したい行が始まった後にすべてのデータを書き換える必要があります。

行を削除するとは、その時点で左側のファイルの内容全体を前の行の最後に移動することを意味します。それにもかかわらず、その時点からファイルを再作成する必要があります。

答え2

即時実行:

csv-parser -f <(cat my-huge.csv | sed '4125878d')

関連情報