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 อักขระผลการเปรียบเทียบจะเป็นจริงและบรรทัดจะถูกพิมพ์