Awk: การเรียนรู้เชลล์สคริปต์โดยใช้คำสั่ง awk Terminal
คำสั่ง "awk" ในระบบปฏิบัติการฟรีประเภท GNU / Linux เป็นคำสั่งที่มีประสิทธิภาพมากซึ่งช่วยให้เราสามารถควบคุมได้มากขึ้นเมื่อประมวลผลข้อมูลจากคำสั่งอื่นหรือคำสั่งคำสั่ง ชื่อ AWK มาจากชื่อย่อของนามสกุลของผู้แต่ง: Alfred Aโฮปีเตอร์ Weinberger และ Brian Kเออนิแกน.
คำสั่งนี้จัดเตรียมภาษาสคริปต์สำหรับการประมวลผลข้อความซึ่งเราสามารถ: กำหนดตัวแปรใช้สตริงและตัวดำเนินการทางคณิตศาสตร์ใช้การควบคุมโฟลว์และวัฏจักรและสร้างรายงานที่จัดรูปแบบ จริงๆแล้ว Awk เป็นมากกว่าคำสั่งการประมวลผลรูปแบบ แต่เป็นภาษาวิเคราะห์เชิงความหมายทั้งหมด
รู้เบื้องต้นเกี่ยวกับคำสั่ง "awk"
AWK เป็นหนึ่งในยูทิลิตี้คอนโซลที่ได้รับความนิยมเป็นอันดับแรกสำหรับการจัดการ (จัดการ / แยก) ข้อมูลโดยการเพิ่มฟังก์ชันการทำงานของท่อ UNIX ให้สูงสุด ภาษาที่ยูทิลิตีนี้ให้ไว้เป็นมาตรฐานในระบบปฏิบัติการ UNIX สมัยใหม่เกือบทั้งหมดดังนั้นจึงเป็นส่วนหนึ่งของข้อมูลจำเพาะพื้นฐานของ UNIX ดังนั้นจึงมักจะติดตั้งไว้แล้วในส่วนใหญ่ตามค่าเริ่มต้น
ไวยากรณ์ที่พบบ่อยที่สุดคือไฟล์ awk 'program' และ 'program' can be: pattern {action} pattern {action} อยู่ที่ไหน คำสั่งอ่านอินพุตไฟล์ทีละบรรทัด แต่ละแถวจะถูกเปรียบเทียบกับแต่ละรูปแบบตามลำดับ สำหรับแต่ละรูปแบบที่ตรงกับแถวการดำเนินการที่เกี่ยวข้องจะดำเนินการ
ตัวอย่างง่ายๆเช่น:
awk -F: '$1=="root" {print}' /etc/passwd
ระบบจะถามฟิลด์แรกว่าเป็นรูทของแต่ละบรรทัดใน / etc / passwd หรือไม่และพิมพ์โดยพิจารณาจาก ":" โดยมี -F: เป็นตัวคั่นฟิลด์
ตัวอย่างการปฏิบัติ
รายการคำสั่งที่ใช้มากที่สุด
ดูรายการตามประวัติของเทอร์มินัลระบบเรียงลำดับจากที่ใช้บ่อยที่สุดไปหาน้อยที่สุด
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
ตัวอย่าง:

กราฟ (ตาราง) พร้อมจำนวนการเชื่อมต่อสำหรับแต่ละโฮสต์
สร้างกราฟแบบข้อความ ASCII ที่แสดงจำนวนการเชื่อมต่อทั้งหมดจากโฮสต์ไปยังที่อยู่ 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 "" }'
ตัวอย่าง:

รายชื่อไดเรกทอรีตามขนาด
พิมพ์รายการไดเร็กทอรีของพา ธ ปัจจุบันจากที่ใหญ่ที่สุดไปยังขนาดเล็กที่สุดบนหน้าจอโดยแสดงฉลากที่ตรงกับขนาดโดยใช้ตัวอักษร: g, m และ 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}'
ตัวอย่าง:

แสดงปริมาณการใช้งานจากอินเทอร์เฟซเครือข่าย
ดูปริมาณการใช้ข้อมูลขาเข้าและขาออกทางออนไลน์ในหน่วยกิโลไบต์ (kb) สำหรับอินเทอร์เฟซเครือข่ายที่ระบุ
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
ตัวอย่าง:

หาซีรีย์หมายเลข fibonacci
สร้างรายการของจำนวน X จำนวนตามรูปแบบ fibonacci ที่กำหนดให้มีการสร้างตัวเลขฐาน 2 ตัว
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
ตัวอย่าง:

รายการกราฟิกของโครงสร้างไฟล์ตามขนาด
รับรายชื่อโฟลเดอร์ทั้งหมดในรูทของระบบปฏิบัติการพร้อมกับกราฟิก (แท่ง) และการแสดงตัวเลขเป็นเปอร์เซ็นต์ของขนาดภายในโฟลเดอร์
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"}'
ตัวอย่าง:

แสดงรายการสรุปประเภทไฟล์ในไดเรกทอรี
แสดงรายการประเภทของไฟล์ที่อยู่ในไดเร็กทอรีพร้อมกับจำนวนไฟล์ที่เกี่ยวข้อง
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
ตัวอย่าง:

ตัวอย่างบรรทัดคำสั่งเหล่านี้โดยใช้คำสั่ง awk ฉันหวังว่าคุณจะพบว่ามีประโยชน์มาก และทำหน้าที่ใช้โดยตรงจากคอนโซลหรือทางอ้อมโดยการแทรกในสคริปต์ (งานอัตโนมัติ)
ในโพสต์ถัดไปเกี่ยวกับ Shell Scripting เราจะสำรวจคำสั่งอื่น ๆ
หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับคำสั่ง "grep" โปรดไปที่ลิงค์นี้ "เดเบียนวิกิ” และหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Shell Scripting ในบล็อกของเราเองคุณสามารถดูสิ่งพิมพ์อื่น ๆ ของเราในหัวข้อนี้ได้โดยคลิกที่นี่: การเขียนสคริปต์ใน FromLinux
