Lệnh awk
trong Linux là một công cụ mạnh mẽ được sử dụng để xử lý và phân tích dữ liệu văn bản theo dòng, cột hoặc điều kiện cụ thể. Nó có thể đọc, chỉnh sửa, lọc, và định dạng dữ liệu từ các tệp văn bản hoặc từ các đầu vào khác. awk
được tích hợp sẵn trong hầu hết các hệ điều hành dựa trên Unix, bao gồm Linux, và thường được sử dụng trong các tập lệnh shell để tự động hóa các tác vụ xử lý dữ liệu.
Dưới đây là các phần quan trọng khi sử dụng lệnh awk
:
Cấu trúc cơ bản của lệnh awk
awk 'pattern {action}' filename
- pattern: Đây là điều kiện hoặc mẫu mà
awk
sẽ tìm kiếm trong dữ liệu. Nếu điều kiện là đúng, awk
sẽ thực hiện action.
- action: Đây là hành động
awk
thực hiện khi mẫu phù hợp được tìm thấy. Nó có thể là in dữ liệu, tính toán, hoặc thao tác với các trường.
- filename: Tên tệp mà
awk
sẽ đọc để xử lý dữ liệu.
Ví dụ đơn giản
In toàn bộ nội dung của một tệp
{print}
: In ra toàn bộ các dòng trong tệp file.txt
.
In cột cụ thể từ tệp
Ví dụ, nếu có tệp data.txt
chứa:
John 25
Jane 30
Doe 40
Lệnh awk
dưới đây sẽ in ra cột thứ nhất (tên):
awk '{print $1}' data.txt
$1
: Đại diện cho cột đầu tiên.
$2
: Sẽ đại diện cho cột thứ hai, $3
cho cột thứ ba, và cứ thế.
Kết quả:
Tìm kiếm và lọc dữ liệu
Giả sử bạn muốn tìm những dòng có chứa tên “John”:
awk '/John/ {print}' data.txt
Các thao tác phổ biến với awk
Tính tổng giá trị của một cột
Ví dụ, nếu bạn có một tệp với các số và bạn muốn tính tổng giá trị của cột thứ hai:
awk '{sum += $2} END {print sum}' data.txt
Đếm số dòng
Để đếm tổng số dòng trong một tệp:
awk 'END {print NR}' data.txt
NR
: Biến tích hợp của awk
đại diện cho số dòng hiện tại.
Điều kiện với if
Bạn có thể sử dụng if
trong awk
để thực hiện các hành động điều kiện. Ví dụ, in ra những người có độ tuổi lớn hơn 30:
awk '{if ($2 > 30) print $1, $2}' data.txt
Biến tích hợp trong awk
- NR: Số dòng hiện tại.
- NF: Số trường (cột) trong dòng hiện tại.
- FS: Ký tự phân cách các trường (mặc định là dấu cách hoặc tab).
- OFS: Ký tự phân cách đầu ra giữa các trường (mặc định là dấu cách).
- RS: Ký tự phân cách dòng (mặc định là dòng mới).
Cách thay đổi ký tự phân cách
Mặc định, awk
sử dụng dấu cách hoặc tab làm ký tự phân cách giữa các cột. Tuy nhiên, bạn có thể thay đổi điều này bằng cách chỉ định ký tự phân cách khác với tùy chọn -F
.
Ví dụ, xử lý tệp CSV có dấu phẩy làm ký tự phân cách:
awk -F ',' '{print $1, $2}' data.csv
Một số ví dụ nâng cao
In những dòng có độ dài hơn 30 ký tự
awk 'length($0) > 30' file.txt
length($0)
: Đo độ dài của dòng hiện tại.
Tính giá trị trung bình của cột
awk '{sum += $2; count += 1} END {print sum/count}' data.txt
- Tính tổng các giá trị trong cột thứ hai và sau đó chia cho số dòng để lấy giá trị trung bình.
Kết luận
Lệnh awk
rất hữu ích trong các tác vụ xử lý dữ liệu văn bản phức tạp, giúp bạn thực hiện mọi thứ từ in đơn giản đến các phép tính toán học và điều kiện phức tạp. awk
đặc biệt mạnh mẽ khi làm việc với các tệp có cấu trúc hoặc khi cần phân tích và xử lý các tệp log, dữ liệu CSV, hay các tệp văn bản khác.