Відредагуйте перший рядок великого текстового файлу


16

У мене величезний текстовий файл, занадто великий для того, щоб вся справа була запам’ятована в пам'ять. Все, що мені потрібно зробити з цим текстовим файлом - це редагувати перший рядок (це файл CSV, і мені потрібно змінити заголовки).

Чи є простий спосіб, як я можу це зробити в башті?


Чи є якась причина, що ви не можете просто скористатися текстовим редактором?
dangph

Файл занадто великий, його понад 20 разів більше, ніж моя максимальна віртуальна пам'ять на цій машині.
рись

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

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

Щоб все зрозуміло;): Я НЕ сумую ed!!! але це було б добре в цій справі (не впевнений, що він може обробляти файл такого розміру ...)
laurent

Відповіді:


22

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

Ще один спосіб - розділити файл, відредагувати та приєднатись знову:

split -b 10000k <file>

and to join:

cat xa* > <file>

upvote для sed.
atroon

Фантастичний, розділений та приєднався саме те, що я шукав, дякую.
рись

Звичайно, sed краще, оскільки він може легко шукати / замінювати весь файл, але якщо йому потрібно лише змінити перший рядок, розділення не є поганим і швидшим.
ларан

4
sed зайняв би години на весь файл (який трохи менше половини ТБ), зміни були лише в першому рядку, розбиття його видається розумним.
рись

3

Якщо ваша модифікація змінює довжину рядка, весь файл потрібно перезаписати, див., Наприклад, це обговорення на SO. Ви, ймовірно, повинні розглянути можливість збереження даних у базі даних.

Маючи це на увазі, ви можете потоково редагувати файл за допомогою sed. Щоб замінити перший рядок, зробіть щось подібне (sed GNU):

< oldfile sed '1c\new_heading' > newfile
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.