Liên hệProfile
Danh mục

Mục Lục

    Cách dùng lệnh awk Linux để xử lý dữ liệu dạng cột tối ưu

    Nguyễn Hưng

    Ngày đăng:

    09/03/2026

    Cập nhật lần cuối:

    09/03/2026

    Lượt xem:
    Chia sẻ
    Đánh giá
    5/5 - (1 bình chọn)

    Nguyễn Hưng

    Lượt xem:
    Ngày đăng:

    09/03/2026

    Cập nhật lần cuối:

    09/03/2026

    Mục lục

    Awk Linux là lệnh được dùng để xử lý và phân tích các file văn bản. Lệnh này được thiết kế chuyên biệt để xử lý dữ liệu dạng cột, cho phép trích xuất cột, lọc theo điều kiện, tính toán và định dạng lại kết quả trên dòng lệnh với hiệu năng cao và cú pháp súc tích. Trong bài viết dưới đây, mình sẽ cùng bạn tìm hiểu về các tính năng quan trọng và cách sử dụng lệnh awk qua các ứng dụng thực tế.

    Những điểm chính

    • Khái niệm: Hiểu rõ khái niệm và nguyên lý vận hành của awk như một ngôn ngữ kịch bản mạnh mẽ để xử lý dữ liệu dòng và cột.
    • Tính năng nổi bật: Nắm được các khả năng cốt lõi như phân tách trường tự động, so khớp mẫu, tính toán số học và tạo báo cáo chuyên nghiệp.
    • Cú pháp và nguyên tắc hoạt động: Thành thạo cách viết lệnh awk trực tiếp hoặc qua file script, hiểu rõ khái niệm Record, Field và các biến tích hợp.
    • Các tùy chọn phổ biến: Có được bảng tra cứu nhanh các tùy chọn quan trọng để tối ưu hóa quy trình xử lý văn bản.
    • Cách cài đặt awk trên Linux: Nắm rõ cách kiểm tra và cài đặt awk Linux,
    • Các trường hợp sử dụng thực tế: Học cách áp dụng awk vào các bài toán thực tế như trích xuất cột, xử lý logic điều kiện và tạo báo cáo xếp loại.
    • Câu hỏi thường gặp: Giải đáp các câu hỏi thường gặp liên quan đến lệnh awk trong Linux.

    Lệnh awk Linux là gì?

    Lệnh awk là lệnh được dùng để xử lý và phân tích các file văn bản. Ngoài ra, awk cũng được định nghĩa là một ngôn ngữ kịch bản được sử dụng cho việc thao tác dữ liệu cấu trúc và tạo lập báo cáo tự động trong môi trường Unix/Linux. Điểm mạnh của ngôn ngữ này là khả năng hoạt động theo cơ chế thông dịch trực tiếp, cho phép người dùng vận dụng linh hoạt các biến, toán tử logic cùng hệ thống hàm số học và chuỗi ký tự phức tạp mà không cần trải qua quá trình biên dịch mã nguồn.

    Lệnh awk là lệnh được dùng để xử lý và phân tích các file văn bản
    Lệnh awk là lệnh được dùng để xử lý và phân tích các file văn bản

    Về nguyên lý vận hành, awk quét toàn bộ nội dung file đầu vào để tìm kiếm các đoạn văn bản khớp với mẫu đã định nghĩa, từ đó thực thi các hành động xử lý tương ứng trên từng dòng dữ liệu cụ thể. Tên gọi của awk không mang ý nghĩa tiếng Anh thông thường mà là từ viết tắt được ghép từ chữ cái đầu trong tên của ba nhà khoa học máy tính đã phát triển ra công cụ này là: Alfred Aho, Peter Weinberger và Brian Kernighan.

    Tính năng của lệnh awk

    Các tính năng quan trọng của lệnh awk là:

    • Xử lý luồng dữ liệu tuần tự: awk tự động quét và đọc dữ liệu đầu vào theo cơ chế từng dòng một và không cần viết code mở file thủ công.
    • Phân tách trường dữ liệu tự động: Công cụ này có khả năng tự động chia nội dung mỗi dòng thành các trường (cột) riêng biệt dựa trên ký tự phân cách, giúp trích xuất dữ liệu dễ dàng.
    • So khớp mẫu linh hoạt: Người dùng có thể so sánh các dòng hoặc từng trường dữ liệu với các biểu thức chính quy hoặc các điều kiện logic phức tạp.
    • Thực thi hành động có điều kiện: awk cho phép lập trình viên định nghĩa các khối lệnh cụ thể để chỉ xử lý những dòng dữ liệu thỏa mãn tiêu chí lọc nhất định.
    • Chuyển đổi cấu trúc dữ liệu: awk hỗ trợ thay đổi cấu trúc file, sắp xếp lại thứ tự các cột hoặc sửa đổi nội dung để phù hợp với định dạng mong muốn.
    • Tổng hợp và tạo báo cáo: SysAdmin có thể sử dụng awk để trích xuất thông tin từ file log và tổng hợp thành các báo cáo thống kê chi tiết.
    • Định dạng đầu ra chuyên nghiệp: Lệnh printf tích hợp sẵn giúp căn chỉnh lề, định dạng số liệu và trình bày dữ liệu đầu ra một cách trực quan, dễ đọc.
    • Tính toán số học và xử lý chuỗi: awk cung cấp đầy đủ các toán tử số học và các hàm thao tác chuỗi.
    • Kiểm soát luồng chương trình: Ngôn ngữ này hỗ trợ trọn bộ các cấu trúc điều khiển lập trình như if, else, whilefor để giải quyết các bài toán logic phức tạp.
    Các tính năng chính của lệnh awk
    Các tính năng chính của lệnh awk

    Cú pháp và nguyên tắc hoạt động của lệnh awk

    awk có hai phương thức thực thi chính đó là trực tiếp trên dòng lệnh hoặc thông qua một file script.

    • Cú pháp inline:
    awk [options] 'program' file…Ví dụ: awk '{print}' file.txt
    • Cú pháp dùng program file:
    awk [options] -f program-file file…Ví dụ: awk -f command.awk file.txt

    Tìm hiểu mô hình Record và Field

    Để sử dụng awk hiệu quả, việc hiểu rõ cách awk nhận diện dữ liệu là rất quan trọng.

    • Record (Bản ghi): Mặc định, awk xử lý dữ liệu theo từng dòng, mỗi dòng được coi là một record và được phân tách bởi ký tự xuống dòng. Biến RS sẽ cho phép bạn thay đổi ký tự phân tách này.
    • Field (Trường): Mỗi record được chia thành các field, mặc định phân tách bởi khoảng trắng. Biến FS sẽ cho phép bạn tùy chỉnh ký tự phân tách.
    Ví dụ về cách tham chiếu bản ghi và trường
    Ví dụ về cách tham chiếu bản ghi và trường

    Các biến tích hợp quan trọng

    • $0: Đại diện cho toàn bộ nội dung của record hiện tại.
    • $1, $2,…: Đại diện cho field thứ nhất, thứ hai,…
    • $NF: Đại diện cho field cuối cùng trong record.
    • NF: Chứa số lượng field trong record hiện tại.
    • NR: Chứa số thứ tự của record hiện tại (số dòng).

    Các tùy chọn phổ biến của lệnh awk

    Dưới đây là danh sách các tham số dòng lệnh thường được sử dụng nhất để tối ưu hóa quy trình xử lý văn bản với awk:

    Tùy chọnChức năng
    -FĐịnh nghĩa ký tự phân tách trường tùy chỉnh thay vì sử dụng khoảng trắng mặc định.
    -fChỉ định đường dẫn tới file script chứa mã lệnh awk để thực thi thay vì phải viết mã lệnh trực tiếp trên dòng lệnh.
    -vKhởi tạo và gán giá trị cho một biến cụ thể trước khi chương trình bắt đầu quá trình xử lý dữ liệu.
    –helpXuất ra màn hình bảng hướng dẫn sử dụng nhanh, bao gồm cú pháp và danh sách các tham số hỗ trợ.
    –versionHiển thị thông tin chi tiết về phiên bản phần mềm awk đang được cài đặt trên hệ thống.

    Cách cài đặt awk trên Linux

    Awk thông thường đã được tích hợp sẵn trong phần lớn bản phân phối GNU/Linux. Để kiểm tra xem hệ thống đã được cài đặt awk hay chưa, bạn hãy dùng lệnh which awk. Nếu lệnh này không trả về đường dẫn nào, bạn cần cài đặt AWK với cú pháp sau:

    • Trên Debian/Ubuntu:
    sudo apt-get update sudo apt-get install gawk
    • Trên CentOS/AlmaLinux/RHEL:
    yum install gawk

    Giả sử, bạn cần xét một file diem.txt chứa dữ liệu điểm số của học sinh, với các cột là Tên, Toán, Văn, Anh và Điểm trung bình.

    Anh 9 8 7 8.0
    Binh 7 8 8 7.7
    Cuong 5 6 7 6.0
    Dung 8 9 9 8.7
    diem.txt chứa dữ liệu điểm số của học sinh
    diem.txt chứa dữ liệu điểm số của học sinh

    1. In toàn bộ nội dung

    Bạn có thể sử dụng print để in ra toàn bộ record với cú pháp sau:

    awk '{print}' diem.txt

    Lệnh {print} khi không có tham số sẽ mặc định hiểu là print $0, do đó lệnh sẽ in ra toàn bộ dòng.

    Bạn dùng awk chạy thẳng trên CLI để in ra tương tự như cat
    Bạn dùng awk chạy thẳng trên CLI để in ra tương tự như cat

    2. Trích xuất cột dữ liệu cụ thể

    Để lấy ra tên học sinh (cột 1) và điểm trung bình (cột 4), bạn tham chiếu trực tiếp đến $1$4 với cú pháp lệnh sau:

    awk '{print $1 "\t" $4}' diem.txt

    Kết quả như sau:

    Anh     8.0
    Binh    7.7
    Cuong   6.0
    Dung    8.7

    "\t" được chèn vào giữa để tạo một ký tự tab, giúp định dạng đầu ra dễ đọc hơn.

    Trích xuất cột dữ liệu cụ thể
    Trích xuất cột dữ liệu cụ thể

    3. Xử lý logic điều kiện với Program File

    Giả sử, bạn cần xếp loại học lực dựa trên điểm trung bình (cột 4) với các tiêu chí:

    • Giỏi: ĐTB >= 8
    • Khá: 6.5 <= ĐTB < 8
    • Trung bình: 5 <= ĐTB < 6.5
    • Yếu: ĐTB < 5

    Khi đó, bạn cần tạo một file xeploai.awk với nội dung logic như sau:

    {
        if ($4 >= 8) grade="Gioi"
        else if ($4 >= 6.5) grade="Kha"
        else if ($4 >= 5) grade="Trung binh"
        else grade="Yeu"
        print $0, "\t=> Xep loai:", grade
    }
    Tạo một file xeploai.awk
    Tạo một file xeploai.awk

    Sau đó, bạn thực thi lệnh awk bằng cách sử dụng cờ -f để gọi file script này:

    awk -f xeploai.awk diem.txt

    Kết quả:

    Anh 9 8 7 8.0 	=> Xep loai: Gioi
    Binh 7 8 8 7.7 	=> Xep loai: Kha
    Cuong 5 6 7 6.0 	=> Xep loai: Trung binh
    Dung 8 9 9 8.7 	=> Xep loai: Gioi

    awk đã đọc từng dòng của diem.txt, áp dụng khối lệnh if-else trong file xeploai.awk để xác định biến grade, sau đó in ra kết quả đã được bổ sung thông tin xếp loại.

    Kết quả đã được bổ sung thông tin xếp loại
    Kết quả đã được bổ sung thông tin xếp loại

    Câu hỏi thường gặp

    Sự khác biệt giữa awk, sed và grep là gì? 

    awk, sed và grep là ba công cụ xử lý văn bản được sử dụng phổ biến trên Linux, cụ thể:
    - grep: Dùng khi bạn chỉ cần tìm kiếm dòng khớp mẫu trong dữ liệu văn bản, thường dùng để lọc log, tìm chuỗi, hoặc kiểm tra sự xuất hiện của pattern.
    - sed: Cho phép thay thế, chèn, xóa, cắt bớt hoặc biến đổi nội dung ngay trong luồng dữ liệu, thường dùng cho các tác vụ Edit/Replace hàng loạt.
    awk: Là một ngôn ngữ kịch bản chuyên cho dữ liệu dạng dòng/cột, cho phép truy cập từng cột, áp dụng điều kiện, tính toán số học và tạo báo cáo.

    Khối lệnh BEGINEND trong AWK dùng để làm gì?

    BEGIN { ... }: Chạy trước khi dòng đầu tiên của file được đọc, thường dùng để khởi tạo biến hoặc in tiêu đề bảng.
    END { ... }: Chạy sau khi dòng cuối cùng đã được xử lý, thường dùng để in kết quả tổng kết.

    Tôi muốn truyền biến từ bên ngoài vào trong awk thì làm sao?

    Bạn không nên nhúng biến Bash trực tiếp vào trong dấu nháy đơn ' ' của awk vì rất dễ gây lỗi cú pháp. Thay vào đó, bạn hãy dùng cờ -v với cú pháp như sau:
    awk -v var_name="$BASH_VAR" …

    Có thể dùng awk để lọc dữ liệu theo điều kiện if phức tạp không?

    Hoàn toàn có thể dùng awk để lọc dữ liệu với các điều kiện if phức tạp. Công cụ này hỗ trợ đầy đủ toán tử so sánh, toán tử logic và cấu trúc điều khiển như if, else, while, for, nên rất phù hợp cho các biểu thức lọc nhiều điều kiện lồng nhau.

    Awk Linux là một ngôn ngữ xử lý dữ liệu chuyên biệt và có khả năng thao tác linh hoạt trên từng trường dữ liệu. Việc sử dụng thành thạo awk sẽ giúp bạn tự động hóa nhiều tác vụ lặp lại, rút ngắn thời gian phân tích sự cố và từ đó nâng cao hiệu quả trong việc vận hành hệ thống. Chúc bạn thao tác thành công với awk và hẹn gặp lại trong các bài viết sau.

    5/5 - (1 bình chọn)
    Nguyễn Hưng
    Tôi là Nguyễn Hưng hay còn được biết đến với nickname là Bo, chuyên gia về hệ thống, mạng và bảo mật. Tôi là Co-Founder của Vietnix và Co-Founder của dự án Chống Lừa Đảo.
    0 0 đánh giá
    Đánh giá bài viết
    Theo dõi
    Thông báo của
    guest
    0 Góp ý
    Cũ nhất
    Mới nhất Được bỏ phiếu nhiều nhất
    Phản hồi nội tuyến
    Xem tất cả bình luận

    BÀI VIẾT LIÊN QUAN

    Hướng dẫn khắc phục sự cố Ubuntu No space left on device root chi tiết và nhanh chóng
    Hướng dẫn khắc phục sự cố Ubuntu No space left on device root chi tiết và nhanh chóng

    Thông báo lỗi No space left on device trên Ubuntu nghĩa là phân vùng đang dùng đã hết tài nguyên khiến hệ thống không ghi thêm dữ liệu. Nguyên nhân thường gặp nhất là do đầy dung lượng ổ đĩa hoặc hết inodes do có quá nhiều file nhỏ. Trong bài viết dưới đây, mình…

    09/03/2026

    Hướng dẫn 5 bước tạo SSH Key trên Linux nhanh chóng và đơn giản
    Hướng dẫn 5 bước tạo SSH Key trên Linux nhanh chóng và đơn giản

    SSH Key trong Linux là một cặp khóa dùng để xác thực an toàn giữa người dùng và máy chủ thông qua giao thức SSH. Trong bài viết này, mình sẽ cung cấp một hướng dẫn toàn diện gồm 5 bước đơn giản về cách tạo và quản lý SSH Key Linux, giúp bạn nâng…

    09/03/2026

    Cách giám sát hiệu năng Linux chuyên sâu với vmstat và iostat
    Cách giám sát hiệu năng Linux chuyên sâu với vmstat và iostat

    vmstat và iostat là công cụ dòng lệnh trong sysstat dùng giám sát hiệu năng Linux. vmstat cho cái nhìn tổng quan về hệ thống (CPU, RAM), còn iostat tập trung phân tích sâu hiệu suất I/O của đĩa. Trong bài viết này, mình sẽ hướng dẫn bạn cách kết hợp vmstat và iostat để…

    09/03/2026

    Hướng dẫn sử dụng lệnh Eject Linux để quản lý thiết bị lưu trữ rời
    Hướng dẫn sử dụng lệnh Eject Linux để quản lý thiết bị lưu trữ rời

    Lệnh eject là công cụ dòng lệnh chuẩn giúp điều khiển phần cứng như ổ quang và ngắt kết nối an toàn các thiết bị lưu trữ di động như USB trước khi tháo ra, qua đó bảo đảm tính toàn vẹn dữ liệu. Trong bài viết này, mình sẽ hướng dẫn bạn cách sử…

    09/03/2026

    linux

    lenh

    text