Редактировать первую строку большого текстового файла


16

У меня огромный текстовый файл, слишком большой, чтобы все это помещалось в память. Все, что мне нужно сделать с этим текстовым файлом, это отредактировать первую строку (это файл CSV, и мне нужно изменить заголовки).

Есть ли простой способ сделать это в bash?


Есть ли какая-то причина, по которой вы не можете просто использовать текстовый редактор?
dangph

Файл слишком большой, он более чем в 20 раз больше моей максимальной виртуальной памяти на этом компьютере.
Линкс

1
справедливо. У меня сложилось впечатление, что хорошие текстовые редакторы могут работать с очень большими файлами, потому что они загружают в память столько, сколько им нужно, но после прочтения некоторых других вопросов кажется, что у большинства из них с ними проблемы.
dangph

@dangph True ... может быть странным, но некоторые старые и устаревшие "текстовые редакторы" (или так называемые), такие как edlinдля ms-dos или edдля Unix, похоже, не имели этой проблемы, но где только линейные редакторы ... RAM в эти времена были редкостью и ценностью, а размер файла в гигабайтах был невозможен! ;)
Лоран

Чтобы все прояснилось;) Я не скучаю ed!!! но это было бы хорошо в этом случае (не уверен, что он может обработать файл такого размера ...)
Лоран

Ответы:


20

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

Другой способ - разделить файл, отредактировать и снова присоединиться:

split -b 10000k <file>

and to join:

cat xa* > <file>

upvote для сед.
atroon

Фантастика, разделение и соединение были именно тем, что я искал, спасибо.
Линкс

Конечно, sed лучше, так как он может легко искать / заменять весь файл, но если ему нужно всего лишь изменить первую строку, split тоже неплох и быстрее.
Лоран

4
Седу потребовались бы часы, чтобы просмотреть весь файл (который составляет чуть меньше половины ТБ), изменения были только в первой строке, разделение на части кажется разумным.
Линкс

3

Если ваша модификация изменяет длину строки, весь файл должен быть переписан, см., Например, это обсуждение SO. Возможно, вам следует рассмотреть возможность сохранения данных в базе данных.

Имея это в виду, вы можете редактировать файл с помощью sed. Чтобы заменить первую строку, сделайте что-то вроде этого (GNU sed):

< oldfile sed '1c\new_heading' > newfile
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.