Lệnh cut trong Linux là một tiện ích dòng lệnh dùng để trích xuất các phần cụ thể từ một dòng văn bản trong tệp hoặc dữ liệu được truyền qua ống (pipe), dựa trên vị trí byte, ký tự hoặc trường được phân tách bởi ký tự xác định. Công cụ này giúp người dùng xử lý dữ liệu nhanh chóng, đặc biệt hữu ích khi cần tách cột trong file log, CSV hay kết quả lệnh. Trong bài viết này, mình sẽ hướng dẫn bạn cách sử dụng lệnh cut một cách chi tiết, kèm ví dụ minh họa dễ hiểu để áp dụng vào thực tế.
Những điểm chính
- Cú pháp lệnh cut: Hiểu rõ cú pháp cơ bản của lệnh cut trong Linux, cách sử dụng để trích xuất dữ liệu nhanh chóng và chính xác từ dòng văn bản.
- Cách dùng các tùy chọn phổ biến: Nắm được những tùy chọn quan trọng như -f, -d, -b, -c giúp bạn linh hoạt hơn khi xử lý văn bản theo byte, ký tự hoặc trường.
- Ứng dụng qua ví dụ cụ thể: Làm quen với các ví dụ thực tế để thấy rõ cách cut hoạt động trong các tình huống khác nhau như phân tách cột, lấy dữ liệu từ dòng đầu ra.
- Kết hợp lệnh cut nâng cao: Biết cách kết hợp cut với các lệnh khác như grep, sort, uniq để tạo ra các chuỗi xử lý dữ liệu mạnh mẽ trong shell.
- Xử lý định dạng dữ liệu bất thường: Biết cách xử lý các trường hợp phức tạp, dữ liệu không chuẩn hoặc chứa ký tự phân cách không phổ biến.
- Biết thêm Vietnix là nhà cung cấp dịch vụ lưu trữ uy tín.
- Câu hỏi thường gặp: Làm rõ các vấn đề mà người mới thường gặp phải khi sử dụng lệnh cut và cách khắc phục hiệu quả.
Cú pháp lệnh lệnh cut trong Linux
Trước khi sử dụng lệnh cut, bạn cần đảm bảo một số điều kiện cơ bản:
- Hệ thống đang chạy Linux.
- Có quyền truy cập vào Terminal (dòng lệnh).
Sau khi đã sẵn sàng, bạn có thể sử dụng lệnh cut trong Linux với cú pháp đơn giản như sau:
cut [tùy chọn] [tên_tập_tin]
Trong đó:
[tùy chọn]
là thành phần bắt buộc, quy định cách mà cut sẽ trích xuất dữ liệu, chẳng hạn theo byte, ký tự hoặc trường.[tên_tập_tin]
là tập tin cần xử lý. Nếu không chỉ định, lệnh cut sẽ đọc dữ liệu từ đầu vào chuẩn (standard input), thường dùng khi kết hợp với các lệnh khác trong pipeline.
Khi xử lý nhiều tập tin cùng lúc, cut sẽ gộp nội dung từ các tập tin đó rồi thực hiện thao tác cắt như yêu cầu. Tuy nhiên, nếu bỏ qua phần tùy chọn, lệnh sẽ báo lỗi và không thực thi được. Bên cạnh cut, bạn cũng có thể tìm hiểu thêm về lệnh awk – một công cụ mạnh mẽ khác dùng để định dạng và xử lý dòng dữ liệu đầu ra trong Linux.
Các tùy chọn lệnh cut trong Linux
Lệnh cut trong Linux đi kèm nhiều tùy chọn giúp bạn linh hoạt trong việc trích xuất dữ liệu từ dòng văn bản. Các tùy chọn này cho phép bạn cắt theo byte, ký tự hoặc trường, đồng thời xác định dấu phân cách đầu vào và đầu ra tùy ý. Dưới đây là bảng các tùy chọn phổ biến của cut:
Tùy chọn | Mô tả |
---|---|
-f hoặc --fields=LIST | Trích xuất các trường (fields) dựa trên dấu phân cách. |
-b hoặc --bytes=LIST | Cắt và lấy ra các byte theo danh sách chỉ định từ mỗi dòng đầu vào. |
-c hoặc --characters=LIST | Trích xuất các ký tự từ dòng đầu vào dựa theo chỉ định. |
-d hoặc --delimiter=DELIM | Chỉ định dấu phân cách thay vì dùng tab mặc định. |
--complement | Hiển thị tất cả các byte, ký tự hoặc trường ngoại trừ những phần được chọn. |
-s hoặc --only-delimited | Chỉ xử lý các dòng có chứa dấu phân cách, bỏ qua các dòng không có. |
--output-delimiter=STRING | Chỉ định dấu phân cách cho đầu ra, mặc định dùng cùng dấu phân cách với đầu vào. |
Các tùy chọn -f
, -b
và -c
đều sử dụng tham số LIST để xác định vị trí dữ liệu cần lấy. LIST có thể là:
- Một số đơn lẻ (ví dụ:
2
), - Một danh sách các số, cách nhau bằng dấu phẩy (ví dụ:
1,3,5
), - Hoặc một khoảng (range), như:
N-
để lấy từ vị trí N đến hết dòng,N-M
để lấy từ vị trí N đến M,-M
để lấy từ đầu đến vị trí M.
Ví dụ về lệnh cut trong Linux
1. Lệnh cut trong Linux với Field Selection
Lệnh cut trong Linux cho phép trích xuất các phần cụ thể từ văn bản đầu vào dựa trên ký tự, byte hoặc trường. Đây là công cụ hữu ích khi xử lý các tệp có cấu trúc như CSV, TSV hoặc đầu ra từ các lệnh khác. Dưới đây là 3 phương pháp chọn trường phổ biến:
- Lựa chọn trường dựa trên ký tự:
Sử dụng tùy chọn -c để chỉ định vị trí ký tự cần trích xuất. Trong đó, [LIST] là danh sách các ký tự muốn lấy từ mỗi dòng:
cut -c [LIST] [file]
Giả sử, bạn trích xuất ký tự đầu tiên và thứ năm từ mỗi dòng trong example.csv: cut -c1,5 example.csv. Nếu không chỉ định tệp, cut sẽ đọc từ đầu vào chuẩn, cho phép kết hợp với các lệnh khác.

- Lựa chọn trường dựa trên độ lệch byte:
Tùy chọn -b giúp trích xuất dữ liệu theo byte:
cut -b [LIST] [file]
- Lựa chọn trường dựa trên số trường:
Khi làm việc với tệp có trường phân cách rõ ràng như CSV, bạn có thể dùng -f để chọn trường, kết hợp với -d để chỉ định dấu phân cách: cut -d’,’ -f2 example.csv. Câu lệnh trên sẽ lấy cột thứ hai (độ tuổi) từ mỗi dòng trong tệp. Điểm quan trọng cần chú ý là cut chỉ hiển thị dữ liệu trích xuất và không thay đổi nội dung gốc của tệp.

Lệnh cut và tùy chọn phân cách
Lệnh cut sử dụng dấu phân cách để nhận biết các trường trong dữ liệu có cấu trúc. Điều này đặc biệt hữu ích khi xử lý các tệp như CSV, TSV hoặc log file.
- Dấu phân cách mặc định: Mặc định, cut sử dụng ký tự tab làm dấu phân cách. Nếu dữ liệu của bạn không sử dụng tab, bạn cần chỉ định dấu phân cách mong muốn bằng tùy chọn -d.
- Dấu phân cách tùy chỉnh: Để sử dụng dấu phân cách khác, cú pháp như sau: cut -d [delimiter] -f [field_number] [file]. Trong đó: [delimiter]: ký tự phân cách (ví dụ: dấu phẩy, dấu cách, dấu hai chấm,…)[field_number]: trường muốn lấy. Việc xác định đúng dấu phân cách là yếu tố then chốt để trích xuất chính xác dữ liệu bằng lệnh cut.
Lệnh cut trong Linux: Tùy chọn bổ sung
Bên cạnh các tùy chọn cơ bản, lệnh cut trong Linux còn hỗ trợ một số tùy chọn nâng cao giúp mở rộng khả năng xử lý và trích xuất dữ liệu. Dưới đây là hai tùy chọn quan trọng cần nắm:
- Tùy chọn –complement: Tùy chọn này cho phép bạn hiển thị tất cả nội dung ngoại trừ phần được chỉ định. Đây là cách đơn giản để loại trừ các trường, ký tự hoặc byte cụ thể khỏi kết quả đầu ra.
Giả sử, bạn in tất cả các trường trừ trường đầu tiên trong tệp example.csv:
cut -f 1 --complement example.csv

Lệnh trên sẽ hiển thị tất cả các trường ngoại trừ cột thứ nhất. Tùy chọn –complement rất hữu ích khi bạn muốn loại bỏ một phần dữ liệu mà không cần xử lý phức tạp.
- Tùy chọn –output-delimiter: Khi trích xuất nhiều trường bằng cut, đầu ra mặc định sẽ không có dấu phân cách giữa các trường. Để định nghĩa dấu phân cách tùy chỉnh trong đầu ra, bạn sử dụng tùy chọn –output-delimiter.
Giả sử, bạn muốn hiển thị trường 1 và 3 của example.csv, sử dụng dấu gạch dưới (_) làm phân cách:
cut -d',' -f1,3 --output-delimiter='_' example.csv

Lệnh trên giúp kết quả hiển thị rõ ràng và dễ đọc hơn, đặc biệt hữu ích khi bạn cần chuẩn hóa dữ liệu đầu ra cho các bước xử lý tiếp theo.
Kết hợp cut trong Linux với các lệnh khác
Kết hợp lệnh cut
với các lệnh khác trong Linux là một cách mạnh mẽ để xử lý và trích xuất dữ liệu. Các lệnh kết hợp này giúp bạn linh hoạt hơn trong việc thao tác với dữ liệu đầu vào và xuất ra các thông tin cụ thể.
- Kết hợp
cut
vớips
để lọc các cột thông tin:
Bạn có thể sử dụng lệnh ps
để liệt kê các tiến trình đang chạy, sau đó sử dụng cut
để lọc và hiển thị các cột thông tin cụ thể như ID tiến trình (PID) và tên lệnh:
ps -e | cut -c1-5,25-
Lệnh này bao gồm các thành phần sau:
ps -e
: Hiển thị tất cả các tiến trình đang chạy.cut -c1-5,25-
: Trích xuất các ký tự từ 1 đến 5 (PID) và từ ký tự 25 trở đi (tên lệnh).
Kết quả sẽ là danh sách các tiến trình với PID và tên lệnh từ các dòng đầu ra của lệnh ps
.
- Kết hợp
cut
vớihead
hoặctail
để trích xuất các dòng và cột cụ thể
Bạn có thể sử dụng lệnh head
hoặc tail
để giới hạn số lượng dòng cần hiển thị, sau đó kết hợp với cut
để trích xuất các cột cụ thể từ dữ liệu. Ví dụ, nếu bạn muốn lấy ba dòng đầu tiên và chỉ trích xuất các cột tên và thành phố (cột thứ nhất và thứ ba) từ tệp example.csv
, bạn có thể sử dụng:
head -n 3 example.csv | cut -d ',' -f1,3
Lệnh này bao gồm các thành phần sau:
head -n 3 example.csv
: Hiển thị ba dòng đầu tiên từ tệpexample.csv
.cut -d ','
-f1,3
: Trích xuất cột đầu tiên và cột thứ ba từ các dòng đã chọn, sử dụng dấu phẩy (,
) làm dấu phân cách.
-Kết quả là bạn sẽ chỉ nhận được ba dòng đầu tiên của tệp example.csv
, với các trường tên và thành phố. Việc kết hợp cut
với các lệnh khác giúp bạn xử lý dữ liệu một cách linh hoạt và tiết kiệm thời gian khi làm việc với các tệp hoặc đầu ra từ các lệnh trong Linux.
Lệnh cut trong Linux: Xử lý các định dạng dữ liệu bất thường
Mặc dù lệnh cut
trong Linux rất mạnh mẽ và hiệu quả khi xử lý các tệp dữ liệu có cấu trúc rõ ràng, nhưng khi đối mặt với dữ liệu không đều đặn, lệnh này lại gặp khó khăn. Cụ thể, khi dữ liệu không có dấu phân cách cố định hoặc có các dấu phân cách không nhất quán, cut
không phải là công cụ lý tưởng để xử lý. Tuy nhiên, vẫn có những cách để xử lý dữ liệu bất thường này bằng cách kết hợp cut
với các công cụ khác hoặc điều chỉnh lệnh cho phù hợp:
- Dữ liệu với khoảng trắng không đồng nhất:
Khi dữ liệu của bạn có nhiều khoảng trắng giữa các trường, lệnh cut
sẽ gặp khó khăn trong việc nhận diện đúng các trường.

Trong trường hợp này, bạn có thể sử dụng lệnh tr
để chuẩn hóa khoảng trắng. Ví dụ, khi có dữ liệu với khoảng trắng không đồng đều, bạn có thể thay thế nhiều khoảng trắng thành một khoảng trắng duy nhất, rồi sử dụng cut
:
cat data.txt | tr -s ' ' | cut -d ' ' -f1,3

Lệnh này sẽ:
- Dùng
tr -s ' '
để thay thế tất cả các khoảng trắng liên tiếp thành một khoảng trắng duy nhất. - Sau đó, sử dụng
cut
để trích xuất trường đầu tiên và trường thứ ba.
Kết quả là các trường dữ liệu được trích xuất chính xác mà không bị lỗi do khoảng trắng thừa.
- Dữ liệu với các dấu phân cách không nhất quán:
Đôi khi, dữ liệu có thể sử dụng nhiều loại dấu phân cách khác nhau như dấu phẩy, dấu cách, hoặc dấu chấm phẩy. Trong trường hợp này, bạn có thể sử dụng sed
để chuyển đổi tất cả các dấu phân cách thành một loại dấu phân cách duy nhất, sau đó áp dụng cut
. Ví dụ, với dữ liệu có cả dấu phẩy và dấu cách làm dấu phân cách:
sed 's/ /,/g' data.txt | cut -d ',' -f1,3
Lệnh này:
- Dùng
sed
để thay thế tất cả các dấu cách (,
). - Sau đó,
cut
sẽ trích xuất các trường dữ liệu từ các dấu phẩy.
Kết quả là các trường dữ liệu được chuẩn hóa với dấu phân cách đồng nhất và trích xuất chính xác. Mặc dù cut
không phải là công cụ tối ưu cho tất cả các tình huống xử lý dữ liệu không đều đặn, việc kết hợp với các công cụ khác như tr
hoặc sed
sẽ giúp bạn khắc phục được vấn đề và sử dụng cut
hiệu quả hơn trong các tình huống này.
Vietnix – Nhà cung cấp dịch vụ lưu trữ uy tín, chất lượng
Vietnix tự hào là nhà cung cấp dịch vụ thuê VPS chất lượng cao, với hạ tầng máy chủ mạnh mẽ và 100% ổ cứng SSD, đảm bảo tốc độ truy cập nhanh và ổn định. Dịch vụ VPS Linux tại Vietnix mang lại sự linh hoạt tuyệt vời, cho phép bạn thay đổi cấu hình dễ dàng mà không ảnh hưởng đến các dịch vụ khác. Hệ thống bảo mật của chúng tôi được tối ưu với quyền truy cập phân quyền chặt chẽ và backup tự động hàng tuần, giúp bạn bảo vệ dữ liệu và khôi phục nhanh chóng. Liên hệ ngay!
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Câu hỏi thường gặp
Khi sử dụng lệnh cut, có cách nào để trích xuất trường không theo thứ tự mặc định không?
Khi sử dụng lệnh cut trong Linux, bạn không thể trích xuất các trường không theo thứ tự mặc định nếu chỉ dùng lệnh cut một mình. Tuy nhiên, có một số cách để làm điều này thông qua việc kết hợp với các công cụ khác:
– Sử dụng lệnh awk
: awk có khả năng trích xuất các trường dữ liệu không theo thứ tự nhất định, cho phép bạn chỉ định các trường một cách linh hoạt.
Ví dụ: awk -F',' '{print $1, $3, $2}' file.csv
sẽ in ra trường 1, 3, và 2.
– Kết hợp với cut
: Bạn có thể sử dụng nhiều lệnh cut cùng lúc để trích xuất các trường không theo thứ tự, nhưng cách này có thể cần phải thực hiện nhiều bước. Ví dụ: cut -d',' -f1 file.csv | cut -d',' -f3
. Tuy nhiên, cách này không thực sự linh hoạt như awk.
Vì vậy, nếu bạn cần trích xuất trường không theo thứ tự, awk sẽ là công cụ tối ưu hơn khi kết hợp với cut.
Cách sử dụng lệnh cut để xử lý các tập tin có dữ liệu không đồng nhất và không có dấu phân cách rõ ràng?
Để xử lý các tập tin có dữ liệu không đồng nhất và không có dấu phân cách rõ ràng bằng lệnh cut, bạn có thể kết hợp các lệnh như tr và sed để chuẩn hóa dữ liệu trước khi sử dụng cut:
– Sử dụng tr
để thay thế các khoảng trắng liên tiếp thành một khoảng trắng duy nhất.
– Dùng sed
để thay thế các dấu phân cách khác nhau thành một dấu phân cách duy nhất.
– Kết hợp cả tr
, sed
và cut
để xử lý dữ liệu phức tạp và trích xuất các trường cần thiết.
– Nếu dữ liệu phức tạp hơn, có thể sử dụng awk để chuẩn hóa dữ liệu trước khi áp dụng cut.
Lời kết
Lệnh cut trong Linux là một công cụ mạnh mẽ và hữu ích giúp người dùng trích xuất dữ liệu từ các tệp văn bản hoặc đầu vào từ dòng lệnh. Mặc dù cut hoạt động tốt với dữ liệu có cấu trúc và phân tách rõ ràng, nhưng khi làm việc với dữ liệu không đồng nhất, bạn cần kết hợp thêm các công cụ khác như tr
hoặc awk
để đạt hiệu quả cao nhất. Việc nắm vững cách sử dụng cut sẽ giúp bạn xử lý và phân tích dữ liệu nhanh chóng và chính xác hơn trong các tác vụ hàng ngày trên hệ thống Linux.