Lệnh awk của Linux

theanh

Administrator
Nhân viên
Trong số nhiều công cụ xử lý văn bản có sẵn trên shell Linux, awk nổi bật vì sức mạnh và tính linh hoạt của nó. Được phát triển ban đầu vào những năm 1970 bởi Aho, Weinberger và Kernighan, awk không chỉ là một lệnh - mà là một ngôn ngữ lập trình hoàn chỉnh được thiết kế để xử lý và phân tích các tệp văn bản.

Lệnh awk​

awk hoạt động trên các tệp và luồng dưới dạng một chuỗi các bản ghi và trường. Theo mặc định, một bản ghi được định nghĩa là một dòng và các trường được phân tách bằng khoảng trắng, mặc dù cả hai đều có thể được định nghĩa lại.

Cú pháp cơ bản​

Cú pháp cơ bản của awk là:
Mã:
awk 'pattern {action}' file
  • Pattern: Chỉ định thời điểm hành động sẽ được thực hiện. Nếu bỏ qua, hành động sẽ áp dụng cho mọi dòng.
  • Action: Một tập hợp các lệnh được thực hiện khi mẫu được khớp. Các hành động được đặt trong dấu ngoặc nhọn {}.

Ví dụ về awk​

In cột đầu tiên của tệp
Mã:
awk '{print $1}' file.txt
Lệnh này in trường đầu tiên của mỗi bản ghi (thường là từ đầu tiên của mỗi dòng) từ file.txt.

Tổng và giá trị trung bình của một cột
Mã:
awk '{sum+=$2; count++} END {print "Sum =", sum; print "Average =", sum/count}' file.txt
Lệnh này tính tổng và giá trị trung bình của các giá trị trong cột thứ hai của file.txt.

Lọc dựa trên điều kiện
Mã:
awk '$3 > 100' file.txt
Điều này hiển thị các dòng từ file.txt trong đó trường thứ ba lớn hơn 100.

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

Làm thế nào để thay đổi dấu phân cách trường trong awk?

Sử dụng tùy chọn -F theo sau là dấu phân cách mong muốn. Ví dụ: awk -F, '{print $2}' file.csv sẽ in trường thứ hai của tệp CSV.

Awk có thể xử lý nhiều tệp cùng một lúc không?

Có, awk có thể xử lý nhiều tệp theo trình tự. Sử dụng awk '{print}' file1.txt file2.txt để xử lý file1.txt và file2.txt theo trình tự.

Làm thế nào để tích hợp awk với các biến shell?

Bạn có thể truyền các biến shell cho awk bằng tùy chọn -v. Ví dụ: var="value"; awk -v awkVar="$var" '{print awkVar}' file.txt sẽ in giá trị của biến shell var cho mỗi dòng trong file.txt.

Có thể sửa đổi tệp tại chỗ bằng awk không?

Không, awk không hỗ trợ trực tiếp chỉnh sửa tại chỗ như sed -i. Tuy nhiên, bạn có thể thực hiện điều này bằng cách chuyển hướng đầu ra của awk sang tệp tạm thời rồi đổi tên thành tệp gốc.

Awk có thể được sử dụng để xử lý văn bản phức tạp không?

Hoàn toàn có thể. Mặc dù awk đơn giản đối với các tác vụ cơ bản, nhưng nó cũng đủ mạnh để xử lý văn bản phức tạp. Nó hỗ trợ mảng, hàm và biểu thức chính quy, khiến nó phù hợp với nhiều tác vụ thao tác văn bản khác nhau.

Kết luận​

Lệnh awk là một công cụ xử lý văn bản dòng lệnh đa năng cho các hệ thống dựa trên Unix. Các tính năng đơn giản nhưng mạnh mẽ của nó khiến nó trở thành một công cụ không thể thiếu đối với bất kỳ ai xử lý tệp văn bản – từ phân tích nhật ký đến trích xuất dữ liệu. Bằng cách thành thạo awk, người dùng có thể khai thác toàn bộ tiềm năng của thao tác văn bản trong Linux.
 
Back
Bên trên