Giới thiệu
Trong lab này, bạn sẽ học cách sử dụng lệnh awk mạnh mẽ trong Linux để xử lý văn bản và thao tác dữ liệu. Lab này bao gồm những kiến thức cơ bản về lệnh awk, bao gồm cú pháp và cách sử dụng nó cho các tác vụ trích xuất văn bản đơn giản. Sau đó, bạn sẽ đi sâu hơn vào các kỹ thuật xử lý văn bản và phân tích dữ liệu nâng cao hơn bằng awk, chẳng hạn như lọc, chuyển đổi và trích xuất dữ liệu cụ thể từ các file log hoặc các nguồn dữ liệu dựa trên văn bản khác.
Lab được chia thành ba bước chính: hiểu những kiến thức cơ bản về lệnh awk, thực hiện xử lý văn bản với awk và sử dụng awk để thao tác và phân tích dữ liệu. Đến cuối lab này, bạn sẽ có hiểu biết vững chắc về cách tận dụng lệnh awk để hợp lý hóa quy trình xử lý văn bản và phân tích dữ liệu của bạn trong môi trường Linux.
Hiểu những kiến thức cơ bản về lệnh awk
Trong bước này, bạn sẽ học những kiến thức cơ bản về lệnh awk trong Linux. Lệnh awk là một công cụ xử lý văn bản mạnh mẽ có thể được sử dụng cho nhiều tác vụ khác nhau, chẳng hạn như trích xuất, thao tác và phân tích dữ liệu.
Trước tiên, hãy cùng tìm hiểu cú pháp cơ bản của lệnh awk:
awk 'pattern {action}' file
pattern
là một điều kiện mà lệnh awk sử dụng để chọn các dòng từ file đầu vào khớp với pattern. action
là tập hợp các lệnh mà awk sẽ thực hiện trên các dòng đã chọn.
Ví dụ, hãy tạo một file có tên data.txt
với nội dung sau:
John,25,Sales
Jane,30,Marketing
Bob,35,IT
Bây giờ, hãy sử dụng awk để in trường thứ hai (age) của mỗi dòng:
awk -F',' '{print $2}' data.txt
Ví dụ đầu ra:
25
30
35
Trong ví dụ này, tùy chọn -F','
báo cho awk sử dụng dấu phẩy ,
làm dấu phân cách trường. Action {print $2}
báo cho awk in trường thứ hai của mỗi dòng.
Bạn cũng có thể sử dụng awk để thực hiện các thao tác phức tạp hơn, chẳng hạn như lọc và chuyển đổi dữ liệu. Ví dụ: hãy in tên và phòng ban của những người lớn hơn 30 tuổi:
awk -F',' '$2 > 30 {print $1, $3}' data.txt
Ví dụ đầu ra:
Jane Marketing
Bob IT
Trong ví dụ này, pattern $2 > 30
chọn các dòng mà trường thứ hai (age) lớn hơn 30 và action {print $1, $3}
in trường thứ nhất và thứ ba (tên và phòng ban).
Thực hiện xử lý văn bản với awk
Trong bước này, bạn sẽ học cách sử dụng awk cho các tác vụ xử lý văn bản nâng cao hơn.
Hãy bắt đầu bằng cách tạo một file có tên log.txt
với nội dung sau:
2023-04-01 10:30:00 INFO: This is a log message.
2023-04-02 11:45:00 ERROR: An error occurred.
2023-04-03 14:20:00 INFO: Another log message.
2023-04-04 16:10:00 WARN: A warning message.
Bây giờ, hãy sử dụng awk để trích xuất ngày, giờ và mức độ log từ mỗi dòng:
awk -F'[ :]' '{print $1, $2, $3, $4, $5, $6}' log.txt
Ví dụ đầu ra:
2023-04-01 10 30 00 INFO This
2023-04-02 11 45 00 ERROR An
2023-04-03 14 20 00 INFO Another
2023-04-04 16 10 00 WARN A
Trong ví dụ này, tùy chọn -F'[ :]'
báo cho awk sử dụng khoảng trắng và dấu hai chấm làm dấu phân cách trường. Action {print $1, $2, $3, $4, $5, $6}
in sáu trường đầu tiên của mỗi dòng, tương ứng với ngày, giờ và mức độ log.
Bạn cũng có thể sử dụng awk để lọc và chuyển đổi dữ liệu. Ví dụ: hãy chỉ in các dòng có mức độ log "ERROR":
awk -F'[ :]' '$5 == "ERROR" {print $1, $2, $3, $4, $5, $6}' log.txt
Ví dụ đầu ra:
2023-04-02 11 45 00 ERROR An
Trong ví dụ này, pattern $5 == "ERROR"
chọn các dòng mà trường thứ năm (mức độ log) là "ERROR" và action {print $1, $2, $3, $4, $5, $6}
in các trường đã chọn.
Sử dụng awk để thao tác và phân tích dữ liệu
Trong bước này, bạn sẽ học cách sử dụng awk cho các tác vụ thao tác và phân tích dữ liệu.
Hãy tạo một file có tên sales.csv
với dữ liệu sau:
Product,Quantity,Price
Laptop,10,999.99
Desktop,15,799.99
Tablet,20,499.99
Smartphone,25,299.99
Bây giờ, hãy sử dụng awk để tính tổng doanh thu cho mỗi sản phẩm:
awk -F',' 'NR > 1 {total = $2 * $3; print $1, "Total Revenue:", total}' sales.csv
Ví dụ đầu ra:
Laptop Total Revenue: 9999.9
Desktop Total Revenue: 11999.85
Tablet Total Revenue: 9999.8
Smartphone Total Revenue: 7499.75
Trong ví dụ này, pattern NR > 1
bỏ qua dòng tiêu đề và action {total = $2 * $3; print $1, "Total Revenue:", total}
tính tổng doanh thu cho mỗi sản phẩm và in kết quả.
Bạn cũng có thể sử dụng awk để thực hiện các tác vụ phân tích dữ liệu phức tạp hơn. Ví dụ: hãy tính giá trung bình của tất cả các sản phẩm:
awk -F',' 'NR > 1 {total += $3; count++} END {print "Average Price:", total/count}' sales.csv
Ví dụ đầu ra:
Average Price: 649.995
Trong ví dụ này, action NR > 1 {total += $3; count++}
tích lũy tổng giá và đếm số lượng sản phẩm. Action END {print "Average Price:", total/count}
tính toán và in giá trung bình.
Tóm tắt
Trong lab này, trước tiên bạn đã học những kiến thức cơ bản về lệnh awk, bao gồm cú pháp và cách sử dụng nó cho các tác vụ xử lý văn bản đơn giản. Sau đó, bạn đã khám phá các khả năng xử lý văn bản nâng cao hơn của awk, chẳng hạn như trích xuất các trường cụ thể từ file log và thực hiện lọc có điều kiện. Cuối cùng, bạn đã khám phá các tính năng thao tác và phân tích dữ liệu của awk, cho phép bạn thực hiện các thao tác phức tạp trên dữ liệu có cấu trúc.
Các điểm học tập chính từ lab này bao gồm việc hiểu cấu trúc cơ bản của lệnh awk, nắm vững việc phân tách và trích xuất trường, đồng thời áp dụng logic có điều kiện và khớp pattern mạnh mẽ của awk để giải quyết nhiều vấn đề về xử lý văn bản và phân tích dữ liệu.