Khám phá cách sử dụng công cụ AWK trên Linux để trích xuất cột dữ liệu, lọc thông tin và tự động hóa xử lý văn bản hiệu quả.
Giới thiệu về AWK trong Linux
AWK là một ngôn ngữ lập trình kịch bản mạnh mẽ được tích hợp sẵn trên các hệ điều hành dạng Unix/Linux. Được thiết kế chuyên biệt cho việc xử lý văn bản và xuất báo cáo, AWK cho phép bạn quét qua từng dòng trong tệp tin, tìm kiếm các mẫu (pattern) phù hợp và thực hiện các hành động tương ứng.
Bài viết này sẽ hướng dẫn bạn các kỹ thuật cơ bản và phổ biến nhất để làm chủ AWK trên hệ thống Linux.
Cú pháp cơ bản của lệnh AWK
Cú pháp tổng quát của AWK trong dòng lệnh như sau:
awk 'pattern { action }' file_name
Trong đó:
- pattern: Điều kiện lọc dữ liệu (nếu bỏ trống, AWK sẽ áp dụng cho tất cả các dòng).
- action: Lệnh thực thi được đặt trong cặp dấu ngoặc nhọn
{}(mặc định là in ra dòng).
1. Trích xuất cột dữ liệu (Field Extraction)
AWK tự động chia mỗi dòng thành các trường (field) dựa trên khoảng trắng. Các biến mặc định bao gồm:
$0: Đại diện cho toàn bộ dòng.$1,$2,$3: Đại diện cho cột thứ 1, thứ 2, thứ 3...
Ví dụ: Để in cột đầu tiên và cột thứ ba của tệp data.txt:
awk '{print $1, $3}' data.txt
2. Thay đổi ký tự phân cách (Field Separator)
Mặc định, AWK dùng khoảng trắng hoặc tab làm ký tự phân cách. Để làm việc với các tệp có định dạng khác như CSV hoặc /etc/passwd (dùng dấu :), bạn sử dụng tham số -F.
Ví dụ: Trích xuất tên người dùng (cột 1) và thư mục gốc (cột 6) từ tệp /etc/passwd:
awk -F: '{print $1, $6}' /etc/passwd
3. Lọc dữ liệu theo điều kiện
Bạn có thể kết hợp điều kiện so sánh để lọc ra các dòng mong muốn trước khi thực hiện hành động.
- So sánh số học: In ra các dòng có giá trị ở cột 3 lớn hơn 50:
awk '$3 > 50 {print $1, $3}' data.txt
- Khớp chuỗi (Regular Expression): In các dòng có chứa từ "ERROR":
awk '/ERROR/ {print $0}' system.log
4. Sử dụng khối BEGIN và END
AWK cung cấp hai khối đặc biệt:
BEGIN: Chạy trước khi AWK đọc tệp dữ liệu.END: Chạy sau khi AWK đã xử lý xong toàn bộ tệp.
Ví dụ: In tiêu đề báo cáo và tổng số dòng đã xử lý với biến tích hợp NR (Number of Records):
awk 'BEGIN {print "--- BẮT ĐẦU BÁO CÁO ---"} {print $1} END {print "Tổng số dòng:", NR}' data.txt
Tổng kết
Lệnh AWK là một công cụ không thể thiếu đối với các quản trị viên hệ thống và lập trình viên làm việc trên Linux. Bằng cách kết hợp giữa trích xuất trường, lọc điều kiện và khối kịch bản BEGIN/END, bạn có thể xử lý các tệp log và dữ liệu văn bản lớn một cách nhanh chóng và chính xác.
Ngày phát hành: 12/05/2026
Nguồn: www.digitalocean.com