Быстрый способ удалить строку из чрезвычайно большого файла

У меня есть 67GB CSV-файл (я знаю … я знаю …)

Мне нужно удалить 4 125878 строк из файла, поскольку он поврежден. Мои инструменты синтаксического анализа CSV не будут игнорировать или пропускать его.

Я мог бы использовать sed чтобы сделать что-то вроде

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

Но это было бы очень дорогостоящей операцией с точки зрения времени и дискового пространства.

Если я использую sed -i '4125878d' in.csv , операция занимает много времени.

Есть ли способ быстро удалить строку из середины огромного файла?

2 Solutions collect form web for “Быстрый способ удалить строку из чрезвычайно большого файла”

Я верю, что нет.

Даже если sed или какая-либо программа, которую вы используете для этого, достаточно умна, чтобы сделать изменения на месте, а не временным файлом, все равно придется переписывать все данные после начала строки, которую вы хотите удалить.

Удаление строки означает, что вы перемещаете все содержимое файла с точки на, до конца предыдущей строки. Независимо от того, вам все равно придется переписывать файл с этого момента.

Сделайте это на лету:

 csv-parser -f <(cat my-huge.csv | sed '4125878d') 
  • частота появления
  • извлекать текст между двумя разными совпадениями
  • Переупорядочение строк в linux
  • Как удалить все теги HTML с помощью sed?
  • sed: отрежьте строку X и добавьте в начало файла
  • как удалить последние две строки с разделителями из каждой строки в большом файле
  • Удаление управляющих символов с помощью sed
  • Sed удалить строку, если n-й символ не является конкретным символом
  • Задача SED, агрегирование строки, содержащей фигурные скобки
  • Добавить переменную в начало строки, не используя sed
  • Заменяйте каждую вкладку ТОЛЬКО в начале каждой строки пробелами
  • Linux и Unix - лучшая ОС в мире.