Edit baris pertama file teks besar


16

Saya memiliki file teks yang sangat besar, terlalu besar untuk disimpan dalam memori. Yang perlu saya lakukan dengan file teks ini adalah mengedit baris pertama (ini file CSV dan saya perlu mengubah judul).

Apakah ada cara sederhana yang bisa saya lakukan dalam bash?


Apakah ada alasan mengapa Anda tidak bisa menggunakan editor teks saja?
dangph

File ini terlalu besar, lebih dari 20 kali lebih besar dari memori virtual maksimum saya pada mesin ini.
lynks

1
cukup adil. Saya mendapat kesan bahwa editor teks yang baik dapat menangani file yang sangat besar karena mereka hanya memuat sebanyak yang mereka butuhkan ke dalam memori, tetapi setelah membaca beberapa pertanyaan lain tampaknya sebagian besar dari mereka memiliki masalah dengan mereka.
dangph

@dangph Benar ... mungkin aneh tetapi "editor teks" yang lama dan usang (atau disebut) seperti edlinuntuk ms-dos atau eduntuk Unix tampaknya tidak memiliki masalah ini tetapi di mana hanya editor baris ... RAM di kali ini adalah hal yang langka dan berharga dan ukuran file dalam Gigabytes adalah sesuatu yang mustahil untuk dipercaya! ;)
laurent

Agar semuanya jelas;): Saya TIDAK ketinggalan ed!!! tetapi akan cocok untuk kasus ini (tidak yakin bisa menangani file dengan ukuran ini ...)
laurent

Jawaban:


20

Anda dapat menggunakan lessuntuk melihat apa yang ingin Anda edit dan gunakan seduntuk melakukan perubahan. Dengan cara ini Anda mengedit tanpa memuat seluruh file.

Cara lain adalah dengan membagi file, mengedit, dan bergabung lagi:

split -b 10000k <file>

and to join:

cat xa* > <file>

memilih untuk sed.
atroon

Fantastis, terpecah dan bergabung adalah persis apa yang saya cari, terima kasih.
lynks

tentu, sed lebih baik karena dapat mencari / mengganti seluruh file dengan mudah tetapi jika dia hanya perlu mengubah baris pertama, split tidak buruk dan lebih cepat juga.
laurent

4
sed akan membutuhkan waktu berjam-jam untuk menjalankan seluruh file (yang hanya di bawah setengah TB), perubahan hanya pada baris pertama, membaginya tampak masuk akal.
lynks

3

Jika modifikasi Anda mengubah panjang baris, seluruh file perlu ditulis ulang, lihat misalnya diskusi ini di SO. Anda mungkin harus mempertimbangkan untuk menyimpan data ke database.

Dengan mengingat hal itu, Anda dapat melakukan streaming mengedit file dengan sed. Untuk mengganti baris pertama, lakukan sesuatu seperti ini (GNU sed):

< oldfile sed '1c\new_heading' > newfile
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.