Lệnh awk của Linux

Tác giả: 25/06/2024

Trong số rất nhiều công cụ xử lý văn bản có sẵn trên vỏ 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 vào những năm 1970 bởi Aho, Weinberger và Kernighan, awk không chỉ là một lệnh – đó 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 xác định 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 xác định lại.

Cú pháp cơ bản

awk 'pattern {action}' file
  • pattern: Chỉ định thời điểm thực hiện hành động. 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 thi khi mẫu được khớp. Các hành động được đặt trong dấu ngoặc nhọn {}.

Ví dụ awk

In cột đầu tiên của tệp

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à trung bình cộng của một cột

awk '{sum+=$2; count++} END {print "Sum =", sum; print "Average =", sum/count}' file.txt

Lệnh này tính tổng và trung bình của các giá trị trong cột thứ hai của file.txt.

Lọc dựa trên một điều kiện

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ác câu hỏi thường gặp

Làm cách nào để thay đổi dấu tá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ý một số tệp tuần tự. Sử dụng file1.txt file2.txt ‘{print}’ awk để xử lý file1.txt và file2.txt liên tiếp.

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

Bạn có thể chuyển các biến shell sang awk bằng cách sử dụ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ể đạt được điều này bằng cách chuyển hướng đầu ra của awk sang một tệp tạm thời và sau đó đổi tên nó thành tệp gốc.

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

Hoàn toàn. Mặc dù awk rất đơn giản cho 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, chức năng và biểu thức chính quy, làm cho nó phù hợp với các tác vụ thao tác văn bản khác nhau.

Kết thúc

Lệnh awk là một công cụ xử lý văn bản dòng lệnh linh hoạt 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ó làm cho nó trở thành một công cụ không thể thiếu cho bất kỳ ai xử lý các 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.