Як я можу редагувати великий файл на місці?


18

У мене є кілька файлів розміром> 1 Гб кожен. Мені потрібно видалити останні файли з байтів. Як я можу це зробити? Я вважаю за краще редагувати файл на місці, щоб заощадити місце на диску.

Я на HP-UX.


Я думаю, що vimє обмеження 4G (може бути неправильним), але я не думаю, що це робить це на місці (може бути неправильним).
ксенотеррацид

1
@xenoterracide: У мене немає тут vim :-( і vi дає "Tmp-файл занадто великий" Помилка.
Hemant

1
@Hernant: Це повідомлення вказує вам все, що вам потрібно знати про редагування на місці: vi намагається скопіювати його в / tmp для роботи. Я думаю, що vim зробить те ж саме, і йому подобається створити резервну копію в одному каталозі.
Девід Торнлі

Відповіді:


10

Спробуйте використовувати hexedit Я не пробував його на HP-UX, але це має працювати. Це дозволяє переміщатися до місця у файлі та усікати. Я впевнений, що він не читає весь файл, а лише шукає потрібне місце для відображення.

Використання є досить простим, як тільки ви запустили його, клавіші зі стрілками дозволяють вам пересуватися. F1 надає допомогу. Ctrl-G переміщується до місця у файлі (підказка: щоб перейти до кінця, використовуйте розмір файлу з нижнього рядка дисплея). Розташуйте курсор на першому байті, який ви хочете обрізати, а потім натисніть клавішу Escape T після того, як ви підтвердите, що скорочення буде зроблено. Ctrl-x виходить.



6

Ви можете використовувати dd, наприклад:

dd if=yourfile of=outname bs=4k count=thefirstX4kb

1
Дякую за Вашу відповідь. Я вважаю за краще редагувати файл на місці, щоб заощадити місце на диску. Якщо нічого не допоможе, я буду використовувати dd :-).
Хемант

6

Використовуйте інструмент, який надає вам доступ до truncateсистемного дзвінка. Ви можете це зробити лише за допомогою інструментів POSIX. Попередження, набране у браузер; будьте особливо обережні якdd помилки навіть непрощені, ніж звичайні команди Unix. 123456 - кількість байтів, які потрібно зберегти.

dd if=/dev/null of=/file/to/truncate seek=1 bs=123456

Версія Perl набагато читає:

perl -e 'truncate "$ARGV[0]", 123456 or die $!' /file/to/truncate

1

Ви можете використовувати splitабо ed, awkабо будь-який інший мову програмування.


Дякую за Вашу відповідь. Я вважаю за краще редагувати файл на місці, щоб економити місце на диску та пам'яті.
Хемант
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.