Chỉnh sửa dòng đầu tiên của tệp văn bản lớn


16

Tôi có một tệp văn bản khổng lồ, quá lớn để toàn bộ nội dung được ghi vào bộ nhớ. Tất cả những gì tôi cần làm với tệp văn bản này là chỉnh sửa dòng đầu tiên (đó là tệp CSV và tôi cần thay đổi tiêu đề).

Có một cách đơn giản tôi có thể làm điều này trong bash?


Có một số lý do bạn không thể chỉ sử dụng một trình soạn thảo văn bản?
dangph

Tệp quá lớn, lớn hơn 20 lần so với bộ nhớ ảo tối đa của tôi trên máy này.
lynks

1
đủ công bằng. Tôi có ấn tượng rằng các trình soạn thảo văn bản tốt có thể xử lý các tệp rất lớn vì chúng chỉ tải nhiều nhất có thể vào bộ nhớ, nhưng sau khi đọc một số câu hỏi khác, có vẻ như hầu hết chúng đều có vấn đề với chúng.
dangph

@dangph Đúng ... có thể là lạ nhưng một vài "trình soạn thảo văn bản" cũ và lỗi thời (như được gọi là) như edlinđối với ms-dos hoặc edcho Unix dường như không có vấn đề này nhưng chỉ có các trình soạn thảo dòng ... RAM tại thời gian này là một điều khan hiếm và quý giá và kích thước tệp trong Gigabyte là điều không thể tin được! ;)
nguyệt quế

Để mọi thứ rõ ràng;): Tôi KHÔNG bỏ lỡ ed!!! nhưng nó sẽ là một sự phù hợp tốt trong trường hợp này (không chắc chắn nó có thể xử lý một tập tin kích thước này ...)
laurent

Câu trả lời:


21

Bạn có thể sử dụng lessđể xem những gì bạn muốn chỉnh sửa và sử dụng sedđể thực hiện các thay đổi. Bằng cách này bạn chỉnh sửa mà không tải toàn bộ tập tin.

Một cách khác là chia nhỏ tệp, chỉnh sửa và tham gia lại:

split -b 10000k <file>

and to join:

cat xa* > <file>

upvote cho sed.
atroon

Tuyệt vời, chia tách và tham gia là chính xác những gì tôi đang tìm kiếm, cảm ơn.
lynks

chắc chắn, sed tốt hơn vì nó có thể tìm kiếm / thay thế toàn bộ tập tin một cách dễ dàng nhưng nếu anh ta chỉ cần thay đổi dòng đầu tiên, thì việc phân tách cũng không tệ và nhanh hơn.
nguyệt quế

4
sed sẽ mất hàng giờ để chạy trên toàn bộ tập tin (chỉ dưới nửa TB), những thay đổi chỉ ở dòng đầu tiên, tách nó ra có vẻ hợp lý.
lynks

3

Nếu sửa đổi của bạn thay đổi độ dài của dòng, toàn bộ tệp cần phải được viết lại, xem ví dụ cuộc thảo luận này về SO. Bạn có thể nên xem xét việc lưu dữ liệu vào cơ sở dữ liệu.

Hãy ghi nhớ điều đó, bạn có thể phát trực tiếp chỉnh sửa tệp bằng sed. Để thay thế dòng đầu tiên, hãy làm một cái gì đó như thế này (GNU sed):

< oldfile sed '1c\new_heading' > newfile
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.