web-dev-qa-db-ja.com

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

67GBの.csvファイルがあります(わかっています...わかっています...)

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

Icouldsedを使用して次のようなことを行う

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

しかし、それは時間とディスク容量の点で非常に費用のかかる操作になります。

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

すばやく巨大なファイルの途中から行を削除する方法はありますか?

3
Terence Eden

私は信じていません。

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

行を削除するということは、ファイルのすべての内容をその時点から前の行の終わりまで左にシフトすることを意味します。いずれにせよ、その時点からファイルを書き直す必要があります。

2
V13

オンザフライで実行します。

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