Awk là một công cụ mạnh mẽ trong Linux được sử dụng để xử lý và định dạng văn bản. Awk có thể thực hiện các tác vụ như tìm kiếm, lọc, định dạng và tính toán trên dữ liệu văn bản.
Cú pháp chung của awk là:
awk options 'pattern {actions}' file
Trong đó, options
là các tùy chọn của awk, pattern
là biểu thức để lọc các dòng phù hợp, actions
là các hành động sẽ được thực hiện trên các dòng phù hợp và file
là file sẽ được xử lý.
Dưới đây là một số ví dụ về cách sử dụng awk:
- Lọc các dòng chứa từ cụ thể trong file:
awk '/apple/' file.txt
Trong đó, apple
là từ cần tìm kiếm và file.txt
là file cần lọc.
- Lọc các dòng có độ dài bằng 4 ký tự:
awk 'length == 4' file.txt
Trong đó, length
là hàm trả về độ dài của dòng và file.txt
là file cần lọc.
- Hiển thị nội dung của cột cụ thể:
awk '{print $2}' file.txt
Trong đó, $2
là chỉ số của cột và file.txt
là file cần lọc.
- Tính tổng của một cột:
awk '{sum += $1} END {print sum}' file.txt
Trong đó, sum
là biến lưu trữ tổng và END
là vị trí cuối cùng của awk.
- Định dạng các dòng:
awk '{printf "%-8s %-8s %-8s\n", $1, $2, $3}' file.txt
Trong đó, %8s
là độ rộng của cột và file.txt
là file cần lọc.
Một số mẹo khi sử dụng awk:
- Sử dụng
-F
để xác định ký tự phân tách giữa các cột. - Sử dụng biến để lưu trữ giá trị để tái sử dụng trong các hành động tiếp theo.
- Sử dụng hàm
substr
để lấy một chuỗi con từ một chuỗi đã cho. - Sử dụng hàm
tolower
để đổi các ký tự thành ký tự thường.
Dưới đây là một số tip khi sử dụng awk trong Linux:
- Sử dụng biến trong awk:
- Sử dụng biến trong awk bắt đầu bằng dấu ‘$’ và tên biến nằm trong dấu ngoặc kép.
- Ví dụ:
awk '{if($1 >= 100) print $1}' file.txt
Trong đó, lệnh sẽ hiển thị các giá trị cột đầu tiên lớn hơn hoặc bằng 100 trong file.txt.
- Sử dụng lệnh tích hợp (built-in function) của awk:
- Awk cung cấp một số lệnh tích hợp để xử lý dữ liệu, bao gồm ‘length’, ‘substr’, ‘index’, ‘split’ và ‘sprintf’.
- Ví dụ:
awk '{print length($0)}' file.txt
Lệnh trên sẽ hiển thị độ dài của mỗi dòng trong file.txt.
- Sử dụng awk với các tập tin CSV:
- Awk cũng có thể sử dụng để xử lý tập tin CSV (comma-separated values).
- Ví dụ:
awk -F"," '{print $1 "," $3}' file.csv
Trong đó, tùy chọn ‘-F”,”‘ sẽ chỉ định dấu phẩy ‘,’ làm phân tách giữa các trường, và lệnh sẽ hiển thị các giá trị của cột thứ nhất và thứ ba trong file.csv, được ngăn cách bằng dấu phẩy.
5. Lấy ra các hàng (dòng) duy nhất của một file văn bản (không lặp lại):
awk '!seen[$0]++' file.txt
6. In ra các hàng có giá trị của một cột nằm trong một phạm vi giá trị cụ thể:
awk '$2 >= 50 && $2 <= 100' file.txt
7. Tính tổng giá trị của một cột:
awk '{ sum += $1 } END { print sum }' file.txt
8. Thay thế một chuỗi trong toàn bộ file văn bản:
awk '{gsub(/old_string/, "new_string"); print}' file.txt
9. Đếm số lượng hàng của file văn bản:
awk 'END { print NR }' file.txt