Lệnh "awk" trong Hệ điều hành miễn phí kiểu GNU / Linux là một lệnh rất mạnh, giúp chúng ta kiểm soát tốt hơn khi xử lý dữ liệu từ các lệnh hoặc lệnh khác. Tên AWK bắt nguồn từ chữ cái đầu của họ các tác giả của nó: Alfred Aho, peter Weinberger và Brian KErnighan.
Lệnh này cung cấp một ngôn ngữ kịch bản để xử lý văn bản mà chúng ta có thể: Xác định biến, sử dụng chuỗi và toán tử số học, sử dụng điều khiển luồng và chu trình, đồng thời tạo báo cáo được định dạng. Trên thực tế, Awk không chỉ là một lệnh xử lý mẫu, nó còn là một ngôn ngữ phân tích ngữ nghĩa toàn bộ.
Giới thiệu về lệnh "awk"
AWK là một trong những tiện ích bảng điều khiển rất phổ biến đầu tiên để quản lý (xử lý / trích xuất) dữ liệu bằng cách tối đa hóa chức năng của các đường ống UNIX. Ngôn ngữ được cung cấp bởi tiện ích này hiện là tiêu chuẩn trong hầu hết tất cả các Hệ điều hành giống UNIX hiện đại, đến nỗi nó là một phần của Thông số kỹ thuật UNIX cơ bản, vì vậy nó thường được cài đặt sẵn trong hầu hết các Hệ điều hành này theo mặc định.
Cú pháp phổ biến nhất của nó là: tệp awk 'chương trình' và trong đó 'chương trình' có thể là: mẫu {action} mẫu {action}. Lệnh đọc đầu vào tệp một dòng tại một thời điểm. Mỗi hàng được so sánh với mỗi mẫu theo thứ tự; đối với mỗi mẫu phù hợp với hàng, hành động tương ứng được thực hiện.
Một ví dụ đơn giản như:
awk -F: '$1=="root" {print}' /etc/passwd
nó yêu cầu trường đầu tiên nếu nó là gốc của mỗi dòng trong / etc / passwd và in nó ra xem xét ":" với -F: làm dấu phân cách trường.
Ví dụ thực tế
Danh sách lệnh được sử dụng nhiều nhất
Xem danh sách dựa trên lịch sử của thiết bị đầu cuối Hệ thống được sắp xếp từ thứ được sử dụng thường xuyên nhất đến ít được sử dụng nhất.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
Ví dụ:
Biểu đồ (Bảng) với số lượng kết nối cho mỗi máy chủ
Tạo biểu đồ dựa trên văn bản ASCII hiển thị tổng số kết nối từ máy chủ đến từng địa chỉ IP.
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'
Ví dụ:
Danh sách thư mục theo kích thước
In ra màn hình danh sách các thư mục của đường dẫn hiện tại từ lớn nhất đến nhỏ nhất hiển thị các nhãn tương ứng với kích thước của chúng bằng cách sử dụng các chữ cái: g, m và k.
du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'
Ví dụ:
Hiển thị lưu lượng truy cập từ Giao diện mạng
Xem trực tuyến mức tiêu thụ dữ liệu gửi đến và gửi đi theo kilobyte (kb) cho một giao diện mạng cụ thể.
while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done
Ví dụ:
Lấy chuỗi số fibonacci
Tạo một danh sách các số lượng X theo mẫu fibonacci cho trước 2 số cơ sở sẽ được xây dựng.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
Ví dụ:
Danh sách đồ họa của cấu trúc tệp theo kích thước
Nhận Danh sách tất cả các thư mục trong thư mục gốc của hệ điều hành cùng với biểu diễn đồ họa (thanh) và số dưới dạng phần trăm kích thước của chúng trong đó.
t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'
Ví dụ:
Liệt kê tóm tắt các loại tệp trong Thư mục
Hiển thị danh sách các loại tệp có trong một thư mục cùng với số lượng tệp tương ứng với nó.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
Ví dụ:
Những ví dụ về các dòng lệnh sử dụng lệnh awk, tôi hy vọng bạn thấy chúng rất hữu ích. Và chúng được sử dụng trực tiếp từ bảng điều khiển hoặc gián tiếp bằng cách chèn chúng vào một tập lệnh (tác vụ tự động).
Trong bài tiếp theo về Shell Scripting, chúng ta sẽ khám phá các lệnh khác.
Nếu bạn muốn tìm hiểu thêm một chút về lệnh "grep", hãy truy cập liên kết này "DEBIAN Wiki”Và nếu bạn muốn tìm hiểu thêm về Shell Scripting trong Blog của riêng chúng tôi, bạn có thể xem các ấn phẩm khác của chúng tôi về chủ đề này, bằng cách nhấp vào đây: Viết kịch bản DesdeLinux
Tôi chỉ hiểu ví dụ đầu tiên, không có gì khác 🙁