AWK - ตัวอย่างพื้นฐาน
บทนี้อธิบายคำสั่ง AWK ที่มีประโยชน์หลายคำสั่งและตัวอย่างที่เหมาะสม พิจารณาไฟล์ข้อความmarks.txt เพื่อดำเนินการกับเนื้อหาต่อไปนี้ -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
การพิมพ์คอลัมน์หรือฟิลด์
คุณสามารถสั่งให้ AWK พิมพ์เฉพาะบางคอลัมน์จากช่องป้อนข้อมูล ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้ -
ตัวอย่าง
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Physics 80
Maths 90
Biology 87
English 85
History 89
ในไฟล์ marks.txtคอลัมน์ที่สามประกอบด้วยชื่อเรื่องและคอลัมน์ที่สี่มีเครื่องหมายที่ได้รับจากหัวข้อหนึ่ง ๆ ให้เราพิมพ์สองคอลัมน์นี้โดยใช้คำสั่ง AWK print ในตัวอย่างข้างต้น$3 and $4 แทนฟิลด์ที่สามและสี่ตามลำดับจากบันทึกอินพุต
การพิมพ์ทุกบรรทัด
ตามค่าเริ่มต้น AWK จะพิมพ์เส้นทั้งหมดที่ตรงกับรูปแบบ
ตัวอย่าง
[jerry]$ awk '/a/ {print $0}' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
ในตัวอย่างข้างต้นเรากำลังค้นหารูปแบบฟอร์ม a. เมื่อการจับคู่รูปแบบสำเร็จจะเรียกใช้คำสั่งจากบล็อกเนื้อหา ในกรณีที่ไม่มีบล็อกเนื้อหา - การดำเนินการเริ่มต้นจะถูกนำมาใช้ซึ่งคือการพิมพ์บันทึก ดังนั้นคำสั่งต่อไปนี้จึงให้ผลลัพธ์เดียวกัน -
ตัวอย่าง
[jerry]$ awk '/a/' marks.txt
การพิมพ์คอลัมน์ตามรูปแบบ
เมื่อการจับคู่รูปแบบสำเร็จ AWK จะพิมพ์บันทึกทั้งหมดตามค่าเริ่มต้น แต่คุณสามารถสั่งให้ AWK พิมพ์เฉพาะบางฟิลด์ได้ ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์ฟิลด์ที่สามและสี่เมื่อการจับคู่รูปแบบสำเร็จ
ตัวอย่าง
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Maths 90
Biology 87
English 85
History 89
การพิมพ์คอลัมน์ในลำดับใดก็ได้
คุณสามารถพิมพ์คอลัมน์ตามลำดับใดก็ได้ ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์คอลัมน์ที่สี่ตามด้วยคอลัมน์ที่สาม
ตัวอย่าง
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
90 Maths
87 Biology
85 English
89 History
การนับและการพิมพ์รูปแบบที่ตรงกัน
ให้เราดูตัวอย่างที่คุณสามารถนับและพิมพ์จำนวนบรรทัดที่จับคู่รูปแบบสำเร็จ
ตัวอย่าง
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Count = 4
ในตัวอย่างนี้เราจะเพิ่มค่าตัวนับเมื่อการจับคู่รูปแบบสำเร็จและเราพิมพ์ค่านี้ในบล็อก END โปรดทราบว่าไม่เหมือนกับภาษาโปรแกรมอื่น ๆ คือไม่จำเป็นต้องประกาศตัวแปรก่อนใช้งาน
การพิมพ์เส้นที่มีมากกว่า 18 ตัวอักษร
ให้เราพิมพ์เฉพาะบรรทัดที่มีมากกว่า 18 อักขระ
ตัวอย่าง
[jerry]$ awk 'length($0) > 18' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
3) Shyam Biology 87
4) Kedar English 85
AWK มีไฟล์ length ฟังก์ชันที่ส่งกลับความยาวของสตริง $0ตัวแปรเก็บทั้งบรรทัดและในกรณีที่ไม่มีบล็อกเนื้อหาการดำเนินการเริ่มต้นจะถูกนำมาใช้เช่นการดำเนินการพิมพ์ ดังนั้นหากบรรทัดมีมากกว่า 18 อักขระผลการเปรียบเทียบจะเป็นจริงและบรรทัดจะถูกพิมพ์