Hướng dẫn chi tiết cách sử dụng lệnh AWK trong Linux/Unix để xử lý văn bản, phân tách trường và lọc dữ liệu hiệu quả qua các ví dụ thực tế.
Lệnh AWK là một trong những công cụ xử lý văn bản và phân tích dữ liệu mạnh mẽ nhất trên hệ điều hành Linux/Unix. Với AWK, bạn có thể dễ dàng lọc dữ liệu, trích xuất các cột, tìm kiếm theo mẫu (pattern matching) và tạo các báo cáo định dạng một cách tự động.
1. Cú pháp cơ bản của lệnh AWK
Cú pháp tổng quát của lệnh AWK như sau:
awk [tùy_chọn] 'mẫu {hành_động}' tên_file
Trong đó:
- mẫu (pattern): Điều kiện để AWK kiểm tra trên từng dòng. Nếu bỏ trống, hành động sẽ được áp dụng cho toàn bộ các dòng.
- hành_động (action): Đoạn mã lệnh được thực thi khi dòng thỏa mãn điều kiện. Hành động luôn nằm trong cặp dấu ngoặc nhọn
{}.
Các biến tích hợp sẵn phổ biến trong AWK:
$0: Đại diện cho toàn bộ dòng hiện tại.$1, $2, $3...: Đại diện cho cột (trường) thứ 1, 2, 3... trên dòng.FS(Field Separator): Dấu phân cách giữa các trường (mặc định là khoảng trắng hoặc tab).NR(Number of Records): Số thứ tự dòng hiện tại đang xử lý.NF(Number of Fields): Tổng số trường (cột) trong dòng hiện tại.
2. Các ví dụ sử dụng lệnh AWK thực tế
Ví dụ 1: In các cột cụ thể trong tập tin
Giả sử bạn có tập tin danhsach.txt. Để chỉ in ra cột thứ nhất và cột thứ ba, sử dụng lệnh:
awk '{print $1, $3}' danhsach.txt
Ví dụ 2: Thay đổi dấu phân cách trường (Field Separator)
Khi làm việc với các tập tin cấu hình như /etc/passwd (dùng dấu : để phân tách các trường), bạn sử dụng tham số -F:
awk -F':' '{print $1, $6}' /etc/passwd
Lệnh trên sẽ trích xuất tên người dùng (cột 1) và thư mục gốc home (cột 6).
Ví dụ 3: Lọc dữ liệu theo điều kiện số học
Bạn có thể kết hợp các phép so sánh trong AWK. Ví dụ, hiển thị các dòng có giá trị ở cột thứ 3 lớn hơn 50:
awk '$3 > 50 {print $1, $3}' bang_diem.txt
Ví dụ 4: Khớp chuỗi ký tự (Pattern Matching)
Để tìm và in các dòng có chứa từ "Error" trong tệp nhật ký server.log:
awk '/Error/ {print $0}' server.log
Ví dụ 5: Đánh số dòng và lấy cột cuối cùng
Sử dụng biến NR để in số thứ tự dòng và NF để lấy giá trị cột cuối cùng của từng dòng:
awk '{print NR, $1, $NF}' data.txt
3. Tổng kết
Lệnh AWK là một công cụ không thể thiếu đối với quản trị viên hệ thống (SysAdmin) và lập trình viên làm việc trên môi trường Linux/Unix. Việc làm chủ AWK giúp bạn tiết kiệm đáng kể thời gian trong công việc xử lý dữ liệu dòng lệnh và tự động hóa tác vụ.
Ngày phát hành: 03/06/2026
Nguồn: www.digitalocean.com