×

Lệnh awk trong Bash xử lý văn bản và trích xuất dữ liệu

Awk là một trong những công cụ mạnh mẽ và linh hoạt của hệ điều hành Unix/Linux, đặc biệt khi bạn cần xử lý văn bản và trích xuất dữ liệu từ các tệp văn bản. Với cú pháp đơn giản và khả năng mở rộng, awk có thể được sử dụng để thực hiện nhiều nhiệm vụ khác nhau từ lọc, sắp xếp cho đến tổng hợp thông tin. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về lệnh Awk trong Bash, cách sử dụng cơ bản cũng như một số ví dụ thực tế để bạn có thể áp dụng.

Giới thiệu về Awk

Awk được phát triển vào những năm 1970 và được đặt tên theo ba nhà sáng lập: Alfred Aho, Peter Weinberger và Brian Kernighan. Awk là một ngôn ngữ lập trình chuyên dụng được thiết kế để xử lý và phân tích các tệp văn bản có cấu trúc, nhất là dạng bảng. Bất kỳ ai làm việc với hệ thống Unix/Linux sẽ thấy Awk rất hữu ích trong việc tự động hóa các tác vụ liên quan đến văn bản và dữ liệu.

Cách hoạt động của Awk

Awk hoạt động theo nguyên lý quét qua từng dòng của tệp đầu vào. Mỗi dòng được chia thành các trường (fields) dựa trên ký tự phân cách (mặc định là khoảng trắng). Mỗi trường có thể được truy cập qua các biến như $1, $2, $3,… cho các trường đầu tiên, thứ hai, thứ ba, và cứ tiếp tục như vậy. Awk sẽ thực hiện các hành động mà bạn đã định nghĩa trên các dòng thỏa mãn điều kiện nhất định.

Cú pháp cơ bản của Awk

Cú pháp cơ bản của Awk như sau:

awk 'điều kiện { hành động }' tệp

Trong đó:

  • điều kiện: điều kiện để chọn dòng (nếu không có điều kiện, awk sẽ xử lý tất cả các dòng).
  • hành động: hành động sẽ thực hiện trên các dòng đã chọn.

Sử dụng Awk để trích xuất dữ liệu

Dưới đây là một số ví dụ cơ bản về cách sử dụng awk để trích xuất dữ liệu từ tệp văn bản.

Lấy trường trong một tệp văn bản

Giả sử bạn có một tệp có tên là students.txt với nội dung như sau:

John Smith 20
Jane Doe 22
Emily Jones 19

Nếu bạn muốn trích xuất tên và tuổi của sinh viên, bạn có thể sử dụng lệnh sau:

awk '{ print $1, $3 }' students.txt

Lệnh này sẽ in ra:

John 20
Jane 22
Emily 19

Lọc dữ liệu dựa trên điều kiện

Bạn cũng có thể thêm điều kiện để chỉ in ra các dòng thỏa mãn một điều kiện nhất định. Ví dụ, để in ra chỉ những sinh viên trên 20 tuổi, bạn có thể sử dụng:

awk '$3 > 20 { print $1, $3 }' students.txt

Điều này sẽ cho ra kết quả là:

Jane 22

Tính toán với dữ liệu

Awk không chỉ cho phép bạn lấy dữ liệu ra mà còn có thể thực hiện các phép toán. Ví dụ, nếu bạn muốn tính tổng tuổi của tất cả sinh viên trong tệp, bạn có thể làm như sau:

awk '{ total += $3 } END { print total }' students.txt

Kết quả sẽ là:

61

Các tùy chọn tùy biến và biến tích hợp sẵn

Awk cung cấp nhiều biến tích hợp sẵn mà bạn có thể sử dụng như:

  • NR: số thứ tự của dòng hiện tại.
  • NF: số lượng trường trong dòng hiện tại.

Sử dụng những biến này, bạn có thể dễ dàng thực hiện các tác vụ phức tạp hơn. Ví dụ, để in ra từng dòng kèm theo số thứ tự của nó:

awk '{ print NR, $0 }' students.txt

Kết hợp với các lệnh khác

Awk có thể kết hợp với các lệnh khác trong Linux, như grep, sort, và nhiều lệnh khác để thực hiện các tác vụ phức tạp. Ví dụ, để tìm các dòng chứa "Jane" và sau đó trích xuất tên và tuổi:

grep Jane students.txt | awk '{ print $1, $3 }'

Kết luận

Awk là một công cụ cực kỳ hữu ích cho những ai làm việc với văn bản và dữ liệu trong môi trường Unix/Linux. Với cú pháp đơn giản nhưng hiệu quả, bạn có thể dễ dàng thực hiện các tác vụ phức tạp mà không mất nhiều thời gian. Chúng ta đã đi qua cách sử dụng cơ bản của Awk, từ việc trích xuất đơn giản cho đến việc thực hiện các phép toán và kết hợp với các lệnh khác. Hy vọng rằng qua bài viết này, bạn sẽ tìm thấy những kiến thức bổ ích để áp dụng Awk vào công việc của mình.

Comments