Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu

Trong thế giới quản trị hệ thống và lập trình shell, việc xử lý và phân tích dữ liệu là một nhiệm vụ quan trọng. Một trong những công cụ mạnh mẽ và linh hoạt giúp thực hiện điều này chính là lệnh awk trong Linux. Đây là một ngôn ngữ lập trình nhỏ gọn, được thiết kế để thao tác với các tệp văn bản và trích xuất dữ liệu từ các tệp này một cách hiệu quả. 

1. Ví dụ 1

Mình có một file demo1.txt như sau:

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (1)

Mình sẽ in ra 3 trường 1, 2 và 3 bằng cách dùng bằng awk như sau:

awk '//{print $1 $2 $3 }' demo1.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (2)

Và bạn có thể thêm lần lượt $4 $5 để lấy thêm trường, mỗi trường đều cách nhau bằng khoảng cách hoặc là một tab và phân chia nhau rõ ràng.

Mình tóm tắt lại 1 chút:

  • Trường 1 là William được truy cập vào khi sử dụng $1
  • Trường 2 là Henry được truy cập vào khi sử dụng $2
  • Trường 3 là “Bill" được truy cập khi sử dụng $3
  • Lần lượt mình có thể sử dụng $4 $5 để truy cập tiếp theo

Như bạn thấy, khi mình in dữ liệu ra thì không có khoảng cách và đó chính là cách in mặc định của awk.

Bạn có thể thêm dấu phẩy ( , ) ở mỗi trường để hiển thị một cách rõ ràng hơn.

awk '//{print $1, $2, $3; }' demo1.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (3)

Một chú ý quan trọng và luôn luôn phải ghị nhớ là cách sử dụng ký tự đô la ( $ ) trong awk sẽ khác cách sử dụng trong shell script.

Trong shell scripting thì ($) được sử dụng để truy cập giá trị của biến. Trong khi đó awk chỉ sử dụng để truy cập nội dung của một trường nhưng không được sử dụng để truy cập giá trị của một biến.

Tìm hiểu thêm: Chạy 2 hoặc nhiều lệnh Terminal cùng lúc trên Linux thế nào?

2. Ví dụ 2

Tiếp tục làm thêm một ví dụ nữa để bạn hiểu rõ hơn nha.

Mình có file demo2.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (4)

Mình ví dụ ở đây có rất nhiều trường nhưng bạn chỉ quan tâm là nó tên là gì và giá bao nhiêu, những trường khác bạn không quan tâm thì tại sao bạn lại cần hiển thị đúng không? Và đây là giải pháp

awk '//{print $2, $3 }' demo2.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (5)

Thông tin hiển thị ra đã khá ok nhưng cũng chưa được rõ lắm. Bây giờ bạn có thể sử dụng awk và thêm vài thông số như sau.

awk '//{printf "%-20s %s\n",$2, $3 }' demo2.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (6)

Lệnh printf là lệnh giúp bạn giúp bạn format lại định dạng hiển thị dữ liệu theo một cách riêng nào đó.

Lời kết: Chỉnh sửa trường là điều rất quan trọng khi sử dụng awk để lọc những đoạn văn bản, giúp loại bỏ những thông tin dư thừa, Và một lần nữa mình muốn nhấn mạnh rằng cách sử dụng ( $ ) trong awk thì sẽ luôn khác cách sử dụng ( $ ) trong shell scripting.

Qua bài viết này, bạn đã được giới thiệu và hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu. Với các ví dụ minh họa cụ thể, bạn có thể thấy được sức mạnh và tính linh hoạt của awk trong việc xử lý tệp văn bản.

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

Lệnh awk trong Linux là gì và nó có tác dụng gì?

Lệnh awk trong Linux là một ngôn ngữ lập trình mạnh mẽ được sử dụng để xử lý và phân tích các tệp văn bản. Nó được sử dụng để lọc, tìm kiếm và thao tác dữ liệu dựa trên các mẫu cụ thể, giúp quản lý và xử lý dữ liệu hiệu quả.

Cách sử dụng lệnh awk để lọc dữ liệu từ một tệp trong Linux?

Để sử dụng lệnh awk để lọc dữ liệu từ một tệp trong Linux, bạn có thể sử dụng cú pháp: awk '/pattern/ {print $0}' filename. Thay thế "pattern" bằng mẫu tìm kiếm của bạn và "filename" bằng tên tệp bạn muốn lọc dữ liệu. Lệnh này sẽ in ra các dòng chứa mẫu tìm kiếm.

Ví dụ về cách sử dụng lệnh awk để phân tích dữ liệu trong Linux?

Ví dụ về cách sử dụng lệnh awk để phân tích dữ liệu trong Linux: awk '{sum+=$1} END {print sum}' datafile. Lệnh này sẽ đọc tệp "datafile" và tính tổng các giá trị trong cột đầu tiên. Đây là một cách nhanh chóng và hiệu quả để xử lý và phân tích dữ liệu trong các tệp văn bản lớn.

Mọi người cùng tìm kiếm: awk, awk trong linux, awk linux, lệnh awk trong linux, awk là gì