Giải thích lệnh Csplit của Linux cho người mới bắt đầu (6 ví dụ)

theanh

Administrator
Nhân viên
Lệnh csplit của Linux là một tiện ích đa năng dùng để chia một tệp thành nhiều phân đoạn dựa trên các dòng hoặc mẫu ngữ cảnh đã chỉ định. Không giống như lệnh split, lệnh này chia các tệp dựa trên kích thước, csplit cho phép người dùng xác định các điểm chia bằng cách sử dụng số dòng, biểu thức chính quy hoặc kết hợp cả hai, khiến lệnh này trở nên lý tưởng để xử lý các tệp văn bản có cấu trúc có thể dự đoán được. Lệnh này tạo các tệp đầu ra được đặt tên theo trình tự, với tiền tố mặc định và hậu tố số, có thể tùy chỉnh. Tính linh hoạt này đặc biệt hữu ích cho các tác vụ như trích xuất các phần từ tệp nhật ký, chia nhỏ tệp cấu hình hoặc chuẩn bị dữ liệu văn bản để xử lý bằng các tập lệnh hoặc ứng dụng khác.

Trong hướng dẫn này, chúng ta sẽ thảo luận về những điều cơ bản của công cụ này và tìm hiểu cách sử dụng nó. Nhưng trước khi thực hiện điều đó, cần lưu ý rằng tất cả các lệnh/hướng dẫn được đề cập ở đây đều đã được thử nghiệm trên Ubuntu 24.04.

Lệnh Csplit của Linux​

Đây là cách trang hướng dẫn của lệnh định nghĩa lệnh này:
Mã:
csplit - split a file into sections determined by context lines
Sau đây là lệnh chung của nó cú pháp:
Mã:
csplit [OPTION]... FILE PATTERN...
Các tệp nhỏ riêng lẻ được tạo bởi csplit có tên như xx00 và xx01. Định nghĩa sau đây - được lấy từ trang hướng dẫn của lệnh - sẽ giúp mọi thứ rõ ràng hơn:
Mã:
Output pieces of FILE separated by PATTERN(s) to files 'xx00', 'xx01', ..., and output byte 
counts of each piece to standard output.
Các ví dụ dạng Hỏi & Đáp sau đây sẽ giúp bạn hiểu rõ hơn về cách lệnh csplit hoạt động.

Câu hỏi 1. Làm thế nào để chia tệp dựa trên số dòng?​

Giả sử tệp của bạn chứa sáu dòng và yêu cầu là chia tệp đó ở dòng thứ ba. Điều này có thể được thực hiện bằng cách truyền '3' làm đối số dòng lệnh sau lệnh và tên tệp.

Ví dụ, trong trường hợp của chúng tôi, file1 chứa các dòng sau:
Mã:
1 Asia
2 Africa
3 Europe
4 North America
5 South America
6 Australia
Và đây là lệnh chúng tôi đã thực thi:
Mã:
csplit file1 3

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22375%22%20height=%2257%22%3E%3C/svg%3E


Các số được tạo ra trong đầu ra là số byte của các tệp mà lệnh tạo ra. Có hai tệp được tạo ra trong đầu ra, cụ thể là xx00 và xx01.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22321%22%20height=%22140%22%3E%3C/svg%3E


Nội dung của các tệp này xác nhận việc chia tách đã xảy ra ở dòng số 3.

Câu hỏi 2. Làm thế nào để chia tách các tệp bằng biểu thức chính quy?​

Bạn cũng có thể sử dụng biểu thức chính quy với lệnh csplit. Ví dụ, trong trường hợp trước, nếu bạn muốn công cụ lặp lại mẫu thêm một lần nữa, thì bạn có thể thực hiện việc này bằng lệnh sau:
Mã:
csplit file1 3 {1}
Vì vậy, trong trường hợp này, ba tệp đầu ra đã được tạo ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22322%22%20height=%22158%22%3E%3C/svg%3E

Câu hỏi 3. Làm thế nào để có tiền tố tùy chỉnh thay vì 'xx' mặc định?​

Theo mặc định, các tệp mà csplit tạo ra trong đầu ra có 'xx' là tiền tố. Tuy nhiên, nếu muốn, bạn có thể thay đổi tiền tố bằng tùy chọn dòng lệnh -f, yêu cầu tiền tố mới làm đầu vào.

Ví dụ, lệnh sau sẽ tạo ra các tệp có 'htf' là tiền tố.
Mã:
csplit file1 1 -f htf

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22440%22%20height=%2284%22%3E%3C/svg%3E

Câu hỏi 4. Làm thế nào để buộc csplit không xóa các tệp đầu ra trong trường hợp xảy ra lỗi?​

Theo mặc định, lệnh csplit sẽ xóa các tệp đầu ra (bất kỳ tệp nào nếu đã tạo) ngay khi gặp lỗi. Ví dụ, ảnh chụp màn hình sau đây xác nhận không có tệp đầu ra nào được tạo ra cuối cùng:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22480%22%20height=%22140%22%3E%3C/svg%3E


Tuy nhiên, bạn có thể thay đổi hành vi này bằng cách sử dụng tùy chọn -k trong lệnh. Ví dụ, lệnh tương tự đã được thực hiện lại, nhưng với tùy chọn này và các tệp đầu ra không bị xóa lần này.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22479%22%20height=%22134%22%3E%3C/svg%3E



Câu hỏi 5. Làm thế nào để loại bỏ các dòng khớp với mẫu đầu vào?​

Lệnh csplit cũng cho phép loại bỏ các dòng khớp với mẫu đầu vào. Tùy chọn được đề cập là --suppress-matched.

Ví dụ, lệnh sau đây sẽ chia tệp (file1) tại dòng 2 (xx00 sẽ chứa dòng 1, trong khi xx11 sẽ chứa phần còn lại của các dòng).
Mã:
csplit file1 2
Nhưng nếu bạn muốn loại bỏ dòng 2, thì bạn có thể chạy lệnh sau lệnh:
Mã:
csplit --suppress-matched file1 2

Câu hỏi 6. Làm thế nào để sử dụng số chữ số tùy chỉnh thay vì số 2 mặc định?​

Giống như tiền tố, số chữ số theo sau tiền tố trong tên tệp đầu ra cũng có thể tùy chỉnh. Vì vậy, giả sử bạn muốn có những cái tên như xx000 và xx0001, bạn có thể thực hiện điều này bằng cách sử dụng tùy chọn dòng lệnh -n, yêu cầu nhập số biểu thị số chữ số mới.

Ví dụ:
Mã:
csplit -n 1 file1 2
Lệnh trên sẽ tạo ra các tên tệp như xx0, xx1, v.v.

Kết luận​

Người dùng dòng lệnh Linux trung bình có thể không cần split hàng ngày, nhưng đây là một tiện ích quan trọng mà bạn ít nhất nên biết. Chúng tôi đã đề cập đến hầu hết các ví dụ cơ bản và tùy chọn dòng lệnh tại đây. Hãy thử chúng, sau đó chuyển đến trang hướng dẫn của công cụ để tìm hiểu thêm về nó.
 
Back
Bên trên