AWK - คู่มือฉบับย่อ
AWK เป็นภาษาโปรแกรมที่ตีความ มีประสิทธิภาพมากและออกแบบมาเป็นพิเศษสำหรับการประมวลผลข้อความ ชื่อนี้ได้มาจากชื่อสกุลของผู้แต่ง -Alfred Aho, Peter Weinberger, and Brian Kernighan.
เวอร์ชันของ AWK ที่ GNU / Linux แจกจ่ายนั้นเขียนและดูแลโดย Free Software Foundation (FSF) มักเรียกกันว่าGNU AWK.
ประเภทของ AWK
ต่อไปนี้เป็นรูปแบบของ AWK -
AWK - AWK ดั้งเดิมจากห้องปฏิบัติการ AT & T
NAWK - AWK เวอร์ชันใหม่และได้รับการปรับปรุงจาก AT & T Laboratory
GAWK- มันคือ GNU AWK GNU / Linux ทั้งหมดจัดส่ง GAWK เข้ากันได้กับ AWK และ NAWK อย่างสมบูรณ์
การใช้งานทั่วไปของ AWK
งานมากมายสามารถทำได้ด้วย AWK รายการด้านล่างนี้เป็นเพียงส่วนหนึ่งของพวกเขา -
- การประมวลผลข้อความ
- การสร้างรายงานข้อความที่จัดรูปแบบ
- ดำเนินการคำนวณทางคณิตศาสตร์
- การดำเนินการกับสตริงและอื่น ๆ อีกมากมาย
บทนี้อธิบายวิธีตั้งค่าสภาพแวดล้อม AWK บนระบบ GNU / Linux ของคุณ
การติดตั้งโดยใช้ Package Manager
โดยทั่วไปแล้ว AWK จะพร้อมใช้งานตามค่าเริ่มต้นในการแจกแจง GNU / Linux ส่วนใหญ่ คุณสามารถใช้ได้whichคำสั่งเพื่อตรวจสอบว่ามีอยู่ในระบบของคุณหรือไม่ ในกรณีที่คุณไม่มี AWK ให้ติดตั้งบน GNU / Linux ที่ใช้ Debian โดยใช้ Advance Package Tool(APT) ผู้จัดการแพ็คเกจดังต่อไปนี้ -
[jeryy]$ sudo apt-get update [jeryy]$ sudo apt-get install gawk
ในทำนองเดียวกันในการติดตั้ง AWK บน GNU / Linux ที่ใช้ RPM ให้ใช้ Yellowdog Updator Modifier yum ผู้จัดการแพ็คเกจดังต่อไปนี้ -
[root]# yum install gawk
หลังจากการติดตั้งตรวจสอบให้แน่ใจว่า AWK สามารถเข้าถึงได้ผ่านทางบรรทัดคำสั่ง
[jerry]$ which awk
ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
/usr/bin/awk
การติดตั้งจากซอร์สโค้ด
เนื่องจาก GNU AWK เป็นส่วนหนึ่งของโครงการ GNU จึงมีซอร์สโค้ดให้ดาวน์โหลดได้ฟรี เราได้เห็นวิธีการติดตั้ง AWK โดยใช้ตัวจัดการแพ็คเกจแล้ว ตอนนี้ให้เราเข้าใจวิธีการติดตั้ง AWK จากซอร์สโค้ด
การติดตั้งต่อไปนี้ใช้ได้กับซอฟต์แวร์ GNU / Linux และสำหรับโปรแกรมอื่น ๆ ส่วนใหญ่ที่มีให้ใช้งานฟรีเช่นกัน ขั้นตอนการติดตั้งมีดังนี้ -
Step 1- ดาวน์โหลดซอร์สโค้ดจากสถานที่จริง ยูทิลิตี้บรรทัดคำสั่งwget เพื่อวัตถุประสงค์นี้
[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz
Step 2 - คลายการบีบอัดและแยกซอร์สโค้ดที่ดาวน์โหลดมา
[jerry]$ tar xvf gawk-4.1.1.tar.xz
Step 3 - เปลี่ยนเป็นไดเร็กทอรีและเรียกใช้การกำหนดค่า
[jerry]$ ./configure
Step 4 - เมื่อสำเร็จแล้วไฟล์ configureสร้าง Makefile ในการรวบรวมซอร์สโค้ดให้ออก amake คำสั่ง
[jerry]$ make
Step 5- คุณสามารถเรียกใช้ชุดทดสอบเพื่อให้แน่ใจว่าบิวด์สะอาด นี่เป็นขั้นตอนที่ไม่บังคับ
[jerry]$ make check
Step 6- สุดท้ายติดตั้ง AWK ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ผู้ใช้ขั้นสูง
[jerry]$ sudo make install
นั่นแหละ! คุณรวบรวมและติดตั้ง AWK เรียบร้อยแล้ว ตรวจสอบโดยเรียกใช้ไฟล์awk คำสั่งดังนี้ -
[jerry]$ which awk
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
/usr/bin/awk
ในการเป็นโปรแกรมเมอร์ผู้เชี่ยวชาญ AWK คุณจำเป็นต้องรู้ภายใน AWK เป็นไปตามขั้นตอนการทำงานที่เรียบง่าย - อ่านดำเนินการและทำซ้ำ แผนภาพต่อไปนี้แสดงให้เห็นถึงขั้นตอนการทำงานของ AWK -
อ่าน
AWK อ่านบรรทัดจากอินพุตสตรีม (ไฟล์ไปป์หรือ stdin) และเก็บไว้ในหน่วยความจำ
ดำเนินการ
คำสั่ง AWK ทั้งหมดถูกนำไปใช้ตามลำดับกับอินพุต ตามค่าเริ่มต้น AWK จะรันคำสั่งในทุกบรรทัด เราสามารถ จำกัด สิ่งนี้ได้โดยระบุรูปแบบ
ทำซ้ำ
กระบวนการนี้จะทำซ้ำจนกว่าไฟล์จะสิ้นสุด
โครงสร้างโปรแกรม
ตอนนี้ให้เราเข้าใจโครงสร้างโปรแกรมของ AWK
BEGIN บล็อก
ไวยากรณ์ของบล็อก BEGIN มีดังนี้ -
Syntax
BEGIN {awk-commands}
บล็อก BEGIN จะดำเนินการเมื่อเริ่มต้นโปรแกรม ดำเนินการเพียงครั้งเดียว นี่เป็นสถานที่ที่ดีในการเริ่มต้นตัวแปร BEGIN เป็นคีย์เวิร์ด AWK และด้วยเหตุนี้จึงต้องเป็นตัวพิมพ์ใหญ่ โปรดทราบว่าบล็อกนี้เป็นทางเลือก
บอดี้บล็อค
ไวยากรณ์ของบล็อกเนื้อหามีดังนี้ -
Syntax
/pattern/ {awk-commands}
บล็อกร่างกายใช้คำสั่ง AWK ในทุกบรรทัดอินพุต ตามค่าเริ่มต้น AWK จะรันคำสั่งในทุกบรรทัด เราสามารถ จำกัด สิ่งนี้ได้โดยระบุรูปแบบ โปรดทราบว่าไม่มีคีย์เวิร์ดสำหรับ Body block
END บล็อก
ไวยากรณ์ของบล็อก END มีดังนี้ -
Syntax
END {awk-commands}
บล็อก END จะดำเนินการเมื่อสิ้นสุดโปรแกรม END เป็นคีย์เวิร์ด AWK และด้วยเหตุนี้จึงต้องเป็นตัวพิมพ์ใหญ่ โปรดทราบว่าบล็อกนี้เป็นทางเลือก
ให้เราสร้างไฟล์ marks.txt ซึ่งประกอบด้วยหมายเลขประจำเครื่องชื่อนักเรียนชื่อเรื่องและจำนวนเครื่องหมายที่ได้รับ
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
ตอนนี้ให้เราแสดงเนื้อหาไฟล์พร้อมส่วนหัวโดยใช้สคริปต์ AWK
Example
[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt
เมื่อรหัสนี้ถูกเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -
Output
Sr No Name Sub Marks
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
เมื่อเริ่มต้น AWK จะพิมพ์ส่วนหัวจากบล็อก BEGIN จากนั้นในบล็อกเนื้อหาจะอ่านบรรทัดจากไฟล์และดำเนินการคำสั่งพิมพ์ของ AWK ซึ่งจะพิมพ์เนื้อหาบนสตรีมเอาต์พุตมาตรฐาน กระบวนการนี้จะทำซ้ำจนกว่าไฟล์จะสิ้นสุด
AWK ใช้งานง่าย เราสามารถให้คำสั่ง AWK ได้โดยตรงจากบรรทัดคำสั่งหรือในรูปแบบของไฟล์ข้อความที่มีคำสั่ง AWK
AWK Command Line
เราสามารถระบุคำสั่ง AWK ภายในเครื่องหมายคำพูดเดียวที่บรรทัดคำสั่งดังที่แสดง -
awk [options] file ...
ตัวอย่าง
พิจารณาไฟล์ข้อความ marks.txt โดยมีเนื้อหาดังต่อไปนี้ -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
ให้เราแสดงเนื้อหาทั้งหมดของไฟล์โดยใช้ AWK ดังนี้ -
Example
[jerry]$ awk '{print}' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
ไฟล์โปรแกรม AWK
เราสามารถจัดเตรียมคำสั่ง AWK ในไฟล์สคริปต์ดังที่แสดง -
awk [options] -f file ....
ขั้นแรกสร้างไฟล์ข้อความ command.awk มีคำสั่ง AWK ดังแสดงด้านล่าง -
{print}
ตอนนี้เราสามารถสั่งให้ AWK อ่านคำสั่งจากไฟล์ข้อความและดำเนินการได้ ที่นี่เราได้ผลลัพธ์เช่นเดียวกับที่แสดงในตัวอย่างด้านบน
Example
[jerry]$ awk -f command.awk marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
ตัวเลือกมาตรฐาน AWK
AWK รองรับตัวเลือกมาตรฐานต่อไปนี้ซึ่งสามารถให้ได้จากบรรทัดคำสั่ง
ตัวเลือก -v
ตัวเลือกนี้กำหนดค่าให้กับตัวแปร อนุญาตให้ทำการมอบหมายก่อนการดำเนินการโปรแกรม ตัวอย่างต่อไปนี้อธิบายถึงการใช้อ็อพชัน -v
Example
[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Name = Jerry
อ็อพชัน --dump-variable [= file]
มันพิมพ์รายการตัวแปรส่วนกลางที่เรียงลำดับและค่าสุดท้ายไปยังไฟล์ ไฟล์เริ่มต้นคือawkvars.out.
Example
[jerry]$ awk --dump-variables '' [jerry]$ cat awkvars.out
ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
Output
ARGC: 1
ARGIND: 0
ARGV: array, 1 elements
BINMODE: 0
CONVFMT: "%.6g"
ERRNO: ""
FIELDWIDTHS: ""
FILENAME: ""
FNR: 0
FPAT: "[^[:space:]]+"
FS: " "
IGNORECASE: 0
LINT: 0
NF: 0
NR: 0
OFMT: "%.6g"
OFS: " "
ORS: "\n"
RLENGTH: 0
RS: "\n"
RSTART: 0
RT: ""
SUBSEP: "\034"
TEXTDOMAIN: "messages"
ตัวเลือก - help
ตัวเลือกนี้จะพิมพ์ข้อความวิธีใช้บนเอาต์พุตมาตรฐาน
Example
[jerry]$ awk --help
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options : GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options : GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
ตัวเลือก --lint [= fatal]
ตัวเลือกนี้ช่วยให้ตรวจสอบโครงสร้างที่ไม่สามารถพกพาได้หรือน่าสงสัย เมื่อเกิดข้อโต้แย้งfatalมีให้โดยถือว่าข้อความเตือนเป็นข้อผิดพลาด ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้ -
Example
[jerry]$ awk --lint '' /bin/ls
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
awk: cmd. line:1: warning: empty program text on command line
awk: cmd. line:1: warning: source file does not end in newline
awk: warning: no program text at all!
ตัวเลือก --posix
ตัวเลือกนี้จะเปิดความเข้ากันได้ของ POSIX ที่เข้มงวดซึ่งส่วนขยายทั่วไปและเฉพาะ gawk ทั้งหมดจะถูกปิดใช้งาน
อ็อพชัน --profile [= file]
ตัวเลือกนี้จะสร้างโปรแกรมเวอร์ชันที่พิมพ์ออกมาสวยในไฟล์ ไฟล์ดีฟอลต์คือawkprof.out. ตัวอย่างง่ายๆด้านล่างแสดงสิ่งนี้ -
Example
[jerry]$ awk --profile 'BEGIN{printf"---|Header|--\n"} {print} END{printf"---|Footer|---\n"}' marks.txt > /dev/null [jerry]$ cat awkprof.out
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
# gawk profile, created Sun Oct 26 19:50:48 2014
# BEGIN block(s)
BEGIN {
printf "---|Header|--\n"
}
# Rule(s) {
print $0
}
# END block(s)
END {
printf "---|Footer|---\n"
}
ตัวเลือก - แบบดั้งเดิม
ตัวเลือกนี้ปิดใช้งานส่วนขยายเฉพาะ gawk ทั้งหมด
ตัวเลือก --version
ตัวเลือกนี้แสดงข้อมูลเวอร์ชันของโปรแกรม AWK
Example
[jerry]$ awk --version
เมื่อรหัสนี้ถูกเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -
Output
GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.
บทนี้อธิบายคำสั่ง 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 อักขระผลลัพธ์การเปรียบเทียบจะเป็นจริงและบรรทัดจะถูกพิมพ์
AWK มีตัวแปรในตัวหลายตัว พวกเขามีบทบาทสำคัญในขณะที่เขียนสคริปต์ AWK บทนี้แสดงให้เห็นถึงการใช้งานตัวแปรในตัว
ตัวแปร AWK มาตรฐาน
ตัวแปร AWK มาตรฐานจะกล่าวถึงด้านล่าง
ARGC
หมายถึงจำนวนอาร์กิวเมนต์ที่ระบุไว้ที่บรรทัดคำสั่ง
Example
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Arguments = 5
แต่ทำไม AWK ถึงแสดง 5 เมื่อคุณส่งผ่านข้อโต้แย้งเพียง 4 ข้อ เพียงตรวจสอบตัวอย่างต่อไปนี้เพื่อคลายข้อสงสัยของคุณ
ARGV
เป็นอาร์เรย์ที่เก็บอาร์กิวเมนต์บรรทัดคำสั่ง ดัชนีที่ถูกต้องของอาร์เรย์มีตั้งแต่ 0 ถึง ARGC-1
Example
[jerry]$ awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' one two three four
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
แสดงถึงรูปแบบการแปลงสำหรับตัวเลข ค่าเริ่มต้นคือ%.6g.
Example
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Conversion Format = %.6g
สิ่งแวดล้อม
มันเป็นอาร์เรย์ที่เชื่อมโยงของตัวแปรสภาพแวดล้อม
Example
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
jerry
ในการค้นหาชื่อของตัวแปรสภาพแวดล้อมอื่น ๆ ให้ใช้ env คำสั่ง
ชื่อไฟล์
แทนชื่อไฟล์ปัจจุบัน
Example
[jerry]$ awk 'END {print FILENAME}' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
marks.txt
โปรดทราบว่า FILENAME ไม่ได้กำหนดไว้ในบล็อก BEGIN
FS
แสดงถึงตัวคั่นฟิลด์ (อินพุต) และค่าเริ่มต้นคือช่องว่าง คุณยังสามารถเปลี่ยนแปลงได้โดยใช้-F ตัวเลือกบรรทัดคำสั่ง
Example
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
FS = $
NF
แสดงจำนวนฟิลด์ในเรกคอร์ดปัจจุบัน ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์เฉพาะบรรทัดที่มีมากกว่าสองฟิลด์
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
One Two Three
One Two Three Four
NR
แสดงถึงจำนวนของระเบียนปัจจุบัน ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์ระเบียนหากหมายเลขระเบียนปัจจุบันน้อยกว่าสาม
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
One Two
One Two Three
FNR
คล้ายกับ NR แต่สัมพันธ์กับไฟล์ปัจจุบัน จะมีประโยชน์เมื่อ AWK ทำงานกับไฟล์หลายไฟล์ ค่าของ FNR รีเซ็ตด้วยไฟล์ใหม่
OFMT
แสดงหมายเลขรูปแบบผลลัพธ์และค่าเริ่มต้นคือ %.6g.
Example
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
OFMT = %.6g
OFS
แสดงถึงตัวคั่นฟิลด์เอาต์พุตและค่าเริ่มต้นคือช่องว่าง
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
OFS = $
ออส
แสดงถึงตัวคั่นเร็กคอร์ดเอาต์พุตและค่าดีฟอลต์คือ newline
Example
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
Output
ORS = $
$
RLENGTH
แสดงถึงความยาวของสตริงที่ตรงกับ matchฟังก์ชัน ฟังก์ชันจับคู่ของ AWK ค้นหาสตริงที่กำหนดในสตริงอินพุต
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
2
อาร์เอส
หมายถึงตัวคั่นเร็กคอร์ด (อินพุต) และค่าดีฟอลต์คือ newline
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
RS = $
$
RSTART
แสดงถึงตำแหน่งแรกในสตริงที่จับคู่ match ฟังก์ชัน
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
9
SUBSEP
แสดงถึงอักขระตัวคั่นสำหรับตัวห้อยอาร์เรย์และค่าดีฟอลต์คือ \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
SUBSEP = ^\$
$ 0
แสดงถึงบันทึกข้อมูลเข้าทั้งหมด
Example
[jerry]$ awk '{print $0}' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$ n
มันหมายถึง n THเขตข้อมูลในระเบียนปัจจุบันที่เขตข้อมูลจะถูกคั่นด้วย FS
Example
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Physics 80
Maths 90
Biology 87
English 85
History 89
ตัวแปรเฉพาะของ GNU AWK
ตัวแปรเฉพาะของ GNU AWK มีดังนี้ -
ARGIND
แสดงดัชนีใน ARGV ของไฟล์ปัจจุบันที่กำลังประมวลผล
Example
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
ใช้เพื่อระบุโหมดไบนารีสำหรับไฟล์ I / O ทั้งหมดบนระบบที่ไม่ใช่ POSIX ค่าตัวเลขเป็น 1, 2 หรือ 3 ระบุว่าไฟล์อินพุตไฟล์เอาต์พุตหรือไฟล์ทั้งหมดตามลำดับควรใช้ไบนารี I / O ค่าสตริงของr หรือ wระบุว่าไฟล์อินพุตหรือไฟล์เอาต์พุตตามลำดับควรใช้ไบนารี I / O ค่าสตริงของrw หรือ wr ระบุว่าไฟล์ทั้งหมดควรใช้ไบนารี I / O
ERRNO
สตริงระบุข้อผิดพลาดเมื่อการเปลี่ยนเส้นทางล้มเหลวสำหรับ getline หรือถ้า close การโทรล้มเหลว
Example
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Error: No such file or directory
FIELDWIDTHS
มีการตั้งค่ารายการตัวแปรความกว้างของฟิลด์ที่คั่นด้วยช่องว่าง GAWK จะแยกวิเคราะห์อินพุตเป็นฟิลด์ที่มีความกว้างคงที่แทนที่จะใช้ค่าของตัวแปร FS เป็นตัวคั่นฟิลด์
ไม่รู้
เมื่อตั้งค่าตัวแปรนี้ GAWK จะไม่คำนึงถึงขนาดตัวพิมพ์ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้ -
Example
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
1) Amit Physics 80
ผ้าสำลี
ให้การควบคุมแบบไดนามิกของไฟล์ --lintตัวเลือกจากโปรแกรม GAWK เมื่อตั้งค่าตัวแปรนี้ GAWK จะพิมพ์คำเตือนผ้าสำลี เมื่อกำหนดค่าสตริงเป็นอันตรายคำเตือนผ้าสำลีจะกลายเป็นข้อผิดพลาดร้ายแรงเช่นเดียวกัน--lint=fatal.
Example
[jerry]$ awk 'BEGIN {LINT = 1; a}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
กระบวนการ
นี่คืออาร์เรย์เชื่อมโยงที่มีข้อมูลเกี่ยวกับกระบวนการเช่นหมายเลข UID จริงและมีประสิทธิภาพหมายเลขรหัสกระบวนการและอื่น ๆ
Example
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
4316
TEXTDOMAIN
แสดงถึงโดเมนข้อความของโปรแกรม AWK ใช้เพื่อค้นหาคำแปลที่แปลเป็นภาษาท้องถิ่นสำหรับสตริงของโปรแกรม
Example
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
messages
ผลลัพธ์ด้านบนแสดงข้อความภาษาอังกฤษเนื่องจาก en_IN สถานที่
เช่นเดียวกับภาษาโปรแกรมอื่น ๆ AWK ยังมีตัวดำเนินการจำนวนมาก บทนี้อธิบายตัวดำเนินการ AWK พร้อมตัวอย่างที่เหมาะสม
ส. | ตัวดำเนินการและคำอธิบาย |
---|---|
1 | ตัวดำเนินการเลขคณิต AWK รองรับตัวดำเนินการเลขคณิตต่อไปนี้ |
2 | ตัวดำเนินการเพิ่มและลด AWK รองรับตัวดำเนินการเพิ่มและลดต่อไปนี้ |
3 | ผู้ดำเนินการมอบหมาย AWK สนับสนุนตัวดำเนินการกำหนดดังต่อไปนี้ |
4 | ตัวดำเนินการเชิงสัมพันธ์ AWK สนับสนุนตัวดำเนินการเชิงสัมพันธ์ต่อไปนี้ |
5 | ตัวดำเนินการทางตรรกะ AWK สนับสนุนตัวดำเนินการเชิงตรรกะต่อไปนี้ |
6 | Ternary Operator เราสามารถใช้นิพจน์เงื่อนไขได้อย่างง่ายดายโดยใช้ตัวดำเนินการ ternary |
7 | ตัวดำเนินการ Unary AWK สนับสนุนตัวดำเนินการยูนารีต่อไปนี้ |
8 | ตัวดำเนินการเอกซ์โพเนนเชียล ตัวดำเนินการเลขชี้กำลังมีสองรูปแบบ |
9 | ตัวดำเนินการเชื่อมต่อสตริง Space คือตัวดำเนินการต่อสตริงที่รวมสองสตริง |
10 | Array Membership Operator มันแสดงโดย in. ใช้ขณะเข้าถึงองค์ประกอบอาร์เรย์ |
11 | ตัวดำเนินการนิพจน์ทั่วไป ตัวอย่างนี้อธิบายตัวดำเนินการนิพจน์ทั่วไปสองรูปแบบ |
AWK มีประสิทธิภาพและประสิทธิผลในการจัดการนิพจน์ทั่วไป งานที่ซับซ้อนจำนวนมากสามารถแก้ไขได้ด้วยนิพจน์ทั่วไปที่เรียบง่าย ผู้เชี่ยวชาญด้านบรรทัดคำสั่งรู้ถึงพลังของนิพจน์ทั่วไป
บทนี้ครอบคลุมนิพจน์ทั่วไปมาตรฐานพร้อมตัวอย่างที่เหมาะสม
จุด
จับคู่อักขระเดี่ยวใด ๆ ยกเว้นอักขระท้ายบรรทัด ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรงกันfin, fun, fan เป็นต้น
ตัวอย่าง
[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'
ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
fun
fin
fan
จุดเริ่มต้นของบรรทัด
ตรงกับจุดเริ่มต้นของบรรทัด ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์บรรทัดทั้งหมดที่ขึ้นต้นด้วยรูปแบบThe.
ตัวอย่าง
[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
There
Their
ท้ายบรรทัด
ตรงกับจุดสิ้นสุดของบรรทัด ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์บรรทัดที่ลงท้ายด้วยตัวอักษรn.
ตัวอย่าง
[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'
เอาต์พุต
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
fun
fin
fan
จับคู่ชุดอักขระ
ใช้เพื่อจับคู่อักขระเพียงตัวเดียวจากหลายตัว ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรงกับรูปแบบCall และ Tall แต่ไม่ Ball.
ตัวอย่าง
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'
เอาต์พุต
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Call
Tall
ชุดพิเศษ
ในชุดพิเศษกะรัตจะลบล้างชุดอักขระในวงเล็บเหลี่ยม ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์เท่านั้นBall.
ตัวอย่าง
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Ball
การเปลี่ยนแปลง
แถบแนวตั้งช่วยให้นิพจน์ทั่วไปสามารถ ORed ในเชิงตรรกะได้ ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์ออกมาBall และ Call.
ตัวอย่าง
[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Call
Ball
การเกิดขึ้นเป็นศูนย์หรือหนึ่งครั้ง
ตรงกับศูนย์หรือหนึ่งครั้งของอักขระนำหน้า ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรงกันColour เช่นเดียวกับ Color. เราได้ทำu เป็นอักขระเสริมโดยใช้ ?.
ตัวอย่าง
[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Colour
Color
การเกิดขึ้นเป็นศูนย์หรือมากกว่า
ตรงกับการเกิดขึ้นของอักขระก่อนหน้าเป็นศูนย์หรือมากกว่า ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรงกันca, cat, catt, และอื่น ๆ
ตัวอย่าง
[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
ca
cat
catt
การเกิดขึ้นอย่างน้อยหนึ่งครั้ง
ตรงกับหนึ่งหรือมากกว่าที่เกิดขึ้นก่อนหน้านี้ ตัวอย่างเช่นตัวอย่างด้านล่างตรงกับเหตุการณ์อย่างน้อยหนึ่งครั้งของไฟล์2.
ตัวอย่าง
[jerry]$ echo -e "111\n22\n123\n234\n456\n222" | awk '/2+/'
ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
22
123
234
222
การจัดกลุ่ม
Parentheses ()ใช้สำหรับการจัดกลุ่มและอักขระ | ใช้สำหรับทางเลือกอื่น ตัวอย่างเช่นนิพจน์ทั่วไปต่อไปนี้ตรงกับบรรทัดที่มีอย่างใดอย่างหนึ่งApple Juice or Apple Cake.
ตัวอย่าง
[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk
'/Apple (Juice|Cake)/'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Apple Juice
Apple Cake
AWK มีอาร์เรย์ที่เชื่อมโยงกันและสิ่งที่ดีที่สุดอย่างหนึ่งคือ - ดัชนีไม่จำเป็นต้องเป็นชุดตัวเลขที่ต่อเนื่อง คุณสามารถใช้สตริงหรือตัวเลขเป็นดัชนีอาร์เรย์ นอกจากนี้ไม่จำเป็นต้องประกาศขนาดของอาร์เรย์ล่วงหน้า - อาร์เรย์สามารถขยาย / ย่อขนาดได้เมื่อรันไทม์
ไวยากรณ์มีดังนี้ -
ไวยากรณ์
array_name[index] = value
ที่ไหน array_name คือชื่อของอาร์เรย์ index คือดัชนีอาร์เรย์และ value คือค่าใด ๆ ที่กำหนดให้กับองค์ประกอบของอาร์เรย์
การสร้าง Array
หากต้องการรับข้อมูลเชิงลึกเกี่ยวกับอาร์เรย์ให้เราสร้างและเข้าถึงองค์ประกอบของอาร์เรย์
ตัวอย่าง
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange"
print fruits["orange"] "\n" fruits["mango"]
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
orange
yellow
ในตัวอย่างข้างต้นเราประกาศอาร์เรย์เป็น fruitsซึ่งดัชนีคือชื่อผลไม้และค่าคือสีของผลไม้ ในการเข้าถึงองค์ประกอบอาร์เรย์เราใช้array_name[index] รูปแบบ.
การลบองค์ประกอบอาร์เรย์
สำหรับการแทรกเราใช้ตัวดำเนินการกำหนด ในทำนองเดียวกันเราสามารถใช้deleteคำสั่งเพื่อลบองค์ประกอบออกจากอาร์เรย์ ไวยากรณ์ของคำสั่งลบมีดังนี้ -
ไวยากรณ์
delete array_name[index]
ตัวอย่างต่อไปนี้ลบองค์ประกอบ orange. ดังนั้นคำสั่งไม่แสดงผลลัพธ์ใด ๆ
ตัวอย่าง
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange";
delete fruits["orange"];
print fruits["orange"]
}'
อาร์เรย์หลายมิติ
AWK รองรับเฉพาะอาร์เรย์มิติเดียว แต่คุณสามารถจำลองอาร์เรย์หลายมิติได้อย่างง่ายดายโดยใช้อาร์เรย์หนึ่งมิติ
ตัวอย่างเช่นด้านล่างคืออาร์เรย์สองมิติ 3x3 -
100 200 300
400 500 600
700 800 900
ในตัวอย่างข้างต้นอาร์เรย์ [0] [0] เก็บ 100 อาร์เรย์ [0] [1] เก็บ 200 และอื่น ๆ ในการจัดเก็บ 100 ที่ตำแหน่งอาร์เรย์ [0] [0] เราสามารถใช้ไวยากรณ์ต่อไปนี้ -
ไวยากรณ์
array["0,0"] = 100
แม้ว่าเราจะให้ 0,0ในฐานะดัชนีสิ่งเหล่านี้ไม่ใช่ดัชนีสองดัชนี ในความเป็นจริงมันเป็นเพียงดัชนีเดียวกับสตริง0,0.
ตัวอย่างต่อไปนี้จำลองอาร์เรย์ 2 มิติ -
ตัวอย่าง
[jerry]$ awk 'BEGIN {
array["0,0"] = 100;
array["0,1"] = 200;
array["0,2"] = 300;
array["1,0"] = 400;
array["1,1"] = 500;
array["1,2"] = 600;
# print array elements
print "array[0,0] = " array["0,0"];
print "array[0,1] = " array["0,1"];
print "array[0,2] = " array["0,2"];
print "array[1,0] = " array["1,0"];
print "array[1,1] = " array["1,1"];
print "array[1,2] = " array["1,2"];
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
array[0,0] = 100
array[0,1] = 200
array[0,2] = 300
array[1,0] = 400
array[1,1] = 500
array[1,2] = 600
คุณยังสามารถดำเนินการต่างๆกับอาร์เรย์เช่นการจัดเรียงองค์ประกอบ / ดัชนี เพื่อจุดประสงค์นั้นคุณสามารถใช้assort และ asorti ฟังก์ชั่น
เช่นเดียวกับภาษาโปรแกรมอื่น ๆ AWK จัดเตรียมคำสั่งเงื่อนไขเพื่อควบคุมการไหลของโปรแกรม บทนี้จะอธิบายคำสั่งควบคุมของ AWK พร้อมตัวอย่างที่เหมาะสม
ถ้าคำสั่ง
เพียงแค่ทดสอบเงื่อนไขและดำเนินการบางอย่างขึ้นอยู่กับเงื่อนไข ด้านล่างนี้คือไวยากรณ์ของif คำสั่ง -
ไวยากรณ์
if (condition)
action
นอกจากนี้เรายังสามารถใช้วงเล็บปีกกาคู่หนึ่งตามที่ระบุด้านล่างเพื่อดำเนินการหลายอย่าง -
ไวยากรณ์
if (condition) {
action-1
action-1
.
.
action-n
}
ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรวจสอบว่าตัวเลขเป็นเลขคู่หรือไม่ -
ตัวอย่าง
[jerry]$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d is even number.\n", num }'
ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
10 is even number.
หากคำชี้แจงอื่น
ใน if-else ไวยากรณ์เราสามารถจัดเตรียมรายการของการดำเนินการที่จะดำเนินการเมื่อเงื่อนไขกลายเป็นเท็จ
ไวยากรณ์ของ if-else คำสั่งมีดังนี้ -
ไวยากรณ์
if (condition)
action-1
else
action-2
ในไวยากรณ์ข้างต้น action-1 จะดำเนินการเมื่อเงื่อนไขประเมินเป็น true และ action-2 ถูกดำเนินการเมื่อเงื่อนไขประเมินเป็นเท็จ ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรวจสอบว่าตัวเลขเป็นเลขคู่หรือไม่ -
ตัวอย่าง
[jerry]$ awk 'BEGIN {
num = 11; if (num % 2 == 0) printf "%d is even number.\n", num;
else printf "%d is odd number.\n", num
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
11 is odd number.
บันได If-Else-If
เราสามารถสร้างไฟล์ if-else-if บันไดโดยใช้หลาย if-elseงบ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้ -
ตัวอย่าง
[jerry]$ awk 'BEGIN {
a = 30;
if (a==10)
print "a = 10";
else if (a == 20)
print "a = 20";
else if (a == 30)
print "a = 30";
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
a = 30
บทนี้อธิบายการวนซ้ำของ AWK พร้อมตัวอย่างที่เหมาะสม ลูปใช้เพื่อดำเนินการชุดของการดำเนินการในลักษณะซ้ำ ๆ การดำเนินการวนซ้ำจะดำเนินต่อไปตราบเท่าที่เงื่อนไขการวนซ้ำเป็นจริง
สำหรับ Loop
ไวยากรณ์ของ for ห่วงคือ -
ไวยากรณ์
for (initialization; condition; increment/decrement)
action
ในขั้นต้น forคำสั่งดำเนินการเริ่มต้นจากนั้นจะตรวจสอบเงื่อนไข หากเงื่อนไขเป็นจริงจะเรียกใช้การดำเนินการหลังจากนั้นจะดำเนินการเพิ่มหรือลด การดำเนินการวนซ้ำจะดำเนินต่อไปตราบเท่าที่เงื่อนไขเป็นจริง ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์ 1 ถึง 5 โดยใช้for วน -
ตัวอย่าง
[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
1
2
3
4
5
ในขณะที่วนซ้ำ
whileลูปยังคงดำเนินการดำเนินการจนกว่าเงื่อนไขทางตรรกะเฉพาะจะประเมินเป็นจริง นี่คือไวยากรณ์ของwhile วน -
ไวยากรณ์
while (condition)
action
AWK ตรวจสอบเงื่อนไขก่อน ถ้าเงื่อนไขเป็นจริงจะเรียกใช้การดำเนินการ กระบวนการนี้จะทำซ้ำตราบเท่าที่เงื่อนไขการวนซ้ำประเมินเป็นจริง ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์ 1 ถึง 5 โดยใช้while วน -
ตัวอย่าง
[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
1
2
3
4
5
Do-While Loop
do-whileลูปคล้ายกับลูป while ยกเว้นว่าเงื่อนไขการทดสอบจะได้รับการประเมินที่ส่วนท้ายของลูป นี่คือไวยากรณ์ของdo-whileวน -
ไวยากรณ์
do
action
while (condition)
ใน do-whileวนซ้ำคำสั่งการดำเนินการจะดำเนินการอย่างน้อยหนึ่งครั้งแม้ว่าคำสั่งเงื่อนไขจะประเมินว่าเป็นเท็จ ตัวอย่างเช่นตัวอย่างต่อไปนี้พิมพ์ 1 ถึง 5 ตัวเลขโดยใช้do-while วน -
ตัวอย่าง
[jerry]$ awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
1
2
3
4
5
งบพัก
ตามชื่อของมันถูกใช้เพื่อสิ้นสุดการทำงานของลูป นี่คือตัวอย่างที่สิ้นสุดลูปเมื่อผลรวมมีค่ามากกว่า 50
ตัวอย่าง
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) break; else print "Sum =", sum
}
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
ดำเนินการต่อคำชี้แจง
continueคำสั่งใช้ภายในลูปเพื่อข้ามไปยังการวนซ้ำถัดไปของลูป จะมีประโยชน์เมื่อคุณต้องการข้ามการประมวลผลข้อมูลบางส่วนภายในลูป ตัวอย่างเช่นตัวอย่างต่อไปนี้ใช้continue คำสั่งเพื่อพิมพ์เลขคู่ระหว่าง 1 ถึง 20
ตัวอย่าง
[jerry]$ awk 'BEGIN {
for (i = 1; i <= 20; ++i) {
if (i % 2 == 0) print i ; else continue
}
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
2
4
6
8
10
12
14
16
18
20
ออกแถลงการณ์
ใช้เพื่อหยุดการทำงานของสคริปต์ ยอมรับจำนวนเต็มเป็นอาร์กิวเมนต์ซึ่งเป็นรหัสสถานะการออกสำหรับกระบวนการ AWK หากไม่มีการโต้แย้งexitส่งคืนสถานะเป็นศูนย์ นี่คือตัวอย่างที่หยุดการดำเนินการเมื่อผลรวมมากกว่า 50
ตัวอย่าง
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) exit(10); else print "Sum =", sum
}
}'
เอาต์พุต
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
ให้เราตรวจสอบสถานะการส่งคืนของสคริปต์
ตัวอย่าง
[jerry]$ echo $?
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
10
AWK มีฟังก์ชันมากมายในตัวซึ่งโปรแกรมเมอร์จะพร้อมใช้งานเสมอ บทนี้อธิบายถึงเลขคณิตสตริงเวลาการจัดการบิตและฟังก์ชันเบ็ดเตล็ดอื่น ๆ พร้อมตัวอย่างที่เหมาะสม
ส. | สร้างขึ้นในฟังก์ชั่นและคำอธิบาย |
---|---|
1 | ฟังก์ชันเลขคณิต AWK มีฟังก์ชันเลขคณิตในตัวดังต่อไปนี้ |
2 | ฟังก์ชันสตริง AWK มีฟังก์ชัน String ในตัวดังต่อไปนี้ |
3 | ฟังก์ชั่นเวลา AWK มีฟังก์ชันเวลาในตัวดังต่อไปนี้ |
4 | ฟังก์ชั่นการจัดการบิต AWK มีฟังก์ชันการจัดการบิตในตัวดังต่อไปนี้ |
5 | ฟังก์ชันเบ็ดเตล็ด AWK มีฟังก์ชันเบ็ดเตล็ดดังต่อไปนี้ |
ฟังก์ชันเป็นส่วนประกอบพื้นฐานของโปรแกรม AWK ช่วยให้เราสามารถกำหนดฟังก์ชันของเราเองได้ โปรแกรมขนาดใหญ่สามารถแบ่งออกเป็นฟังก์ชันและแต่ละฟังก์ชันสามารถเขียน / ทดสอบได้อย่างอิสระ ให้การใช้งานโค้ดซ้ำ
ด้านล่างเป็นรูปแบบทั่วไปของฟังก์ชันที่ผู้ใช้กำหนดเอง -
ไวยากรณ์
function function_name(argument1, argument2, ...) {
function body
}
ในไวยากรณ์นี้ไฟล์ function_nameคือชื่อของฟังก์ชันที่ผู้ใช้กำหนดเอง ชื่อฟังก์ชั่นควรขึ้นต้นด้วยตัวอักษรและอักขระที่เหลืออาจรวมกันเป็นตัวเลขอักขระตามตัวอักษรหรือขีดล่างก็ได้ ไม่สามารถใช้คำสำรองของ AWK เป็นชื่อฟังก์ชันได้
ฟังก์ชันสามารถยอมรับหลายอาร์กิวเมนต์โดยคั่นด้วยเครื่องหมายจุลภาค ข้อโต้แย้งไม่ได้บังคับ คุณยังสามารถสร้างฟังก์ชันที่ผู้ใช้กำหนดโดยไม่มีอาร์กิวเมนต์
function body ประกอบด้วยงบ AWK อย่างน้อยหนึ่งรายการ
ให้เราเขียนสองฟังก์ชันที่คำนวณค่าต่ำสุดและจำนวนสูงสุดและเรียกใช้ฟังก์ชันเหล่านี้จากฟังก์ชันอื่นที่เรียกว่า main. functions.awk ไฟล์ประกอบด้วย -
ตัวอย่าง
# Returns minimum number
function find_min(num1, num2){
if (num1 < num2)
return num1
return num2
}
# Returns maximum number
function find_max(num1, num2){
if (num1 > num2)
return num1
return num2
}
# Main function
function main(num1, num2){
# Find minimum number
result = find_min(10, 20)
print "Minimum =", result
# Find maximum number
result = find_max(10, 20)
print "Maximum =", result
}
# Script execution starts here
BEGIN {
main(10, 20)
}
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Minimum = 10
Maximum = 20
จนถึงตอนนี้เราแสดงข้อมูลบนสตรีมเอาต์พุตมาตรฐาน เรายังสามารถเปลี่ยนเส้นทางข้อมูลไปยังไฟล์ การเปลี่ยนเส้นทางจะปรากฏขึ้นหลังไฟล์print หรือ printfคำให้การ. การเปลี่ยนเส้นทางใน AWK เขียนเหมือนกับการเปลี่ยนเส้นทางในคำสั่งเชลล์ยกเว้นว่าจะเขียนภายในโปรแกรม AWK บทนี้จะอธิบายการเปลี่ยนเส้นทางด้วยตัวอย่างที่เหมาะสม
ตัวดำเนินการเปลี่ยนเส้นทาง
ไวยากรณ์ของตัวดำเนินการเปลี่ยนเส้นทางคือ -
ไวยากรณ์
print DATA > output-file
มันเขียนข้อมูลลงในไฟล์ output-file. หากไม่มีไฟล์เอาต์พุตจะสร้างขึ้น เมื่อใช้การเปลี่ยนเส้นทางประเภทนี้เอาต์พุตไฟล์จะถูกลบก่อนที่เอาต์พุตแรกจะถูกเขียนลงในไฟล์นั้น การดำเนินการเขียนในภายหลังไปยังไฟล์เอาต์พุตเดียวกันจะไม่ลบไฟล์เอาต์พุต แต่ผนวกเข้าด้วยกัน ตัวอย่างเช่นตัวอย่างต่อไปนี้เขียนHello, World !!! ไปยังไฟล์
ให้เราสร้างไฟล์ที่มีข้อมูลข้อความ
ตัวอย่าง
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Old data
ตอนนี้ให้เราเปลี่ยนเส้นทางเนื้อหาบางส่วนโดยใช้ตัวดำเนินการเปลี่ยนเส้นทางของ AWK
ตัวอย่าง
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Hello, World !!!
ผนวก Operator
ไวยากรณ์ของตัวดำเนินการต่อท้ายมีดังนี้ -
ไวยากรณ์
print DATA >> output-file
ต่อท้ายข้อมูลลงในไฟล์ output-file. หากไม่มีไฟล์เอาต์พุตจะสร้างขึ้น เมื่อใช้การเปลี่ยนเส้นทางประเภทนี้เนื้อหาใหม่จะถูกต่อท้ายไฟล์ ตัวอย่างเช่นตัวอย่างต่อไปนี้ต่อท้ายHello, World !!! ไปยังไฟล์
ให้เราสร้างไฟล์ที่มีข้อมูลข้อความ
ตัวอย่าง
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Old data
ตอนนี้ให้เราต่อท้ายเนื้อหาบางส่วนโดยใช้ตัวดำเนินการผนวกของ AWK
ตัวอย่าง
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Old data
Hello, World !!!
ท่อ
เป็นไปได้ที่จะส่งเอาต์พุตไปยังโปรแกรมอื่นผ่านไพพ์แทนที่จะใช้ไฟล์ การเปลี่ยนเส้นทางนี้จะเปิดไปป์เพื่อรับคำสั่งและเขียนค่าของไอเท็มผ่านไพพ์นี้ไปยังโปรเซสอื่นเพื่อรันคำสั่ง คำสั่งอาร์กิวเมนต์การเปลี่ยนเส้นทางเป็นนิพจน์ AWK นี่คือไวยากรณ์ของไปป์ -
ไวยากรณ์
print items | command
ให้เราใช้ tr คำสั่งในการแปลงอักษรตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่
ตัวอย่าง
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
HELLO, WORLD !!!
การสื่อสารสองทาง
AWK สามารถสื่อสารกับกระบวนการภายนอกโดยใช้ไฟล์ |&ซึ่งเป็นการสื่อสารสองทาง ตัวอย่างเช่นตัวอย่างต่อไปนี้ใช้trคำสั่งในการแปลงอักษรตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ ของเราcommand.awk ไฟล์ประกอบด้วย -
ตัวอย่าง
BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
HELLO, WORLD !!!
สคริปต์ดูคลุมเครือไหม ให้เราเข้าใจผิด
คำสั่งแรก cmd = "tr [a-z] [A-Z]"คือคำสั่งที่เราสร้างการสื่อสารสองทางจาก AWK
คำสั่งถัดไปกล่าวคือคำสั่งพิมพ์ให้ข้อมูลเข้ากับไฟล์ trคำสั่ง ที่นี่&| บ่งบอกถึงการสื่อสารสองทาง
คำสั่งที่สามกล่าวคือ close(cmd, "to")ปิดไฟล์ to กระบวนการหลังจากแข่งขันการดำเนินการ
คำสั่งต่อไป cmd |& getline out เก็บไฟล์ output ออกเป็นตัวแปรด้วยความช่วยเหลือของฟังก์ชัน getline
คำสั่งพิมพ์ถัดไปจะพิมพ์ผลลัพธ์และสุดท้ายคือ close ฟังก์ชันปิดคำสั่ง
จนถึงตอนนี้เราใช้ AWK's print และ printfฟังก์ชั่นในการแสดงข้อมูลบนเอาต์พุตมาตรฐาน แต่ printf มีประสิทธิภาพมากกว่าที่เราเคยเห็นมาก่อน ฟังก์ชันนี้ยืมมาจากภาษา C และมีประโยชน์มากในขณะที่สร้างเอาต์พุตที่จัดรูปแบบ ด้านล่างนี้คือไวยากรณ์ของคำสั่ง printf -
ไวยากรณ์
printf fmt, expr-list
ในไวยากรณ์ข้างต้น fmt คือสตริงของข้อกำหนดรูปแบบและค่าคงที่ expr-list คือรายการอาร์กิวเมนต์ที่สอดคล้องกับตัวระบุรูปแบบ
ลำดับการหลบหนี
เช่นเดียวกับสตริงใด ๆ รูปแบบสามารถมีลำดับการหลีกเลี่ยงที่ฝังอยู่ ด้านล่างนี้เป็นลำดับการหลบหนีที่ AWK สนับสนุน -
บรรทัดใหม่
ตัวอย่างต่อไปนี้จะพิมพ์ Hello และ World แยกบรรทัดโดยใช้อักขระขึ้นบรรทัดใหม่ -
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Hello
World
แท็บแนวนอน
ตัวอย่างต่อไปนี้ใช้แท็บแนวนอนเพื่อแสดงฟิลด์ต่างๆ -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
Output
Sr No Name Sub Marks
แท็บแนวตั้ง
ตัวอย่างต่อไปนี้ใช้แท็บแนวตั้งหลังจากแต่ละไฟล์ -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Sr No
Name
Sub
Marks
Backspace
ตัวอย่างต่อไปนี้พิมพ์ backspace หลังทุกฟิลด์ยกเว้นฟิลด์สุดท้าย มันจะลบตัวเลขสุดท้ายจากสามฟิลด์แรก ตัวอย่างเช่นField 1 จะแสดงเป็น Fieldเนื่องจากอักขระสุดท้ายถูกลบด้วย backspace อย่างไรก็ตามสนามสุดท้ายField 4 จะแสดงตามที่เป็นอยู่เนื่องจากเราไม่มีไฟล์ \b หลังจาก Field 4.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Field Field Field Field 4
การกลับรถ
ในตัวอย่างต่อไปนี้หลังจากพิมพ์ทุกฟิลด์เราจะทำไฟล์ Carriage Return และพิมพ์ค่าถัดไปที่ด้านบนของค่าที่พิมพ์ในปัจจุบัน หมายความว่าในผลลัพธ์สุดท้ายคุณสามารถเห็นได้เท่านั้นField 4เนื่องจากเป็นสิ่งสุดท้ายที่จะพิมพ์ด้านบนของฟิลด์ก่อนหน้าทั้งหมด
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Field 4
ฟีดรูปแบบ
ตัวอย่างต่อไปนี้ใช้ฟีดฟอร์มหลังจากพิมพ์แต่ละฟิลด์
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Sr No
Name
Sub
Marks
ตัวระบุรูปแบบ
เช่นเดียวกับในภาษาซี AWK ยังมีตัวระบุรูปแบบ คำสั่ง printf เวอร์ชัน AWK ยอมรับรูปแบบข้อกำหนดการแปลงต่อไปนี้ -
%ค
มันพิมพ์อักขระตัวเดียว ถ้าอาร์กิวเมนต์ที่ใช้สำหรับ%cเป็นตัวเลขจะถือว่าเป็นอักขระและพิมพ์ มิฉะนั้นอาร์กิวเมนต์จะถือว่าเป็นสตริงและพิมพ์อักขระตัวแรกของสตริงนั้นเท่านั้น
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
ASCII value 65 = character A
% d และ% i
พิมพ์เฉพาะส่วนจำนวนเต็มของเลขฐานสิบ
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Percentags = 80
% e และ% E
มันพิมพ์ตัวเลขทศนิยมของรูปแบบ [-] d.dddddde [+ -] dd
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Percentags = 8.066000e+01
%E ใช้รูปแบบ E แทน e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Percentags = 8.066000E+01
% ฉ
มันพิมพ์ตัวเลขทศนิยมของรูปแบบ [-] ddd.dddddd
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Percentags = 80.660000
% g และ% G
ใช้การแปลง% e หรือ% f แล้วแต่จำนวนใดจะสั้นกว่าโดยไม่ได้กดศูนย์ที่ไม่สำคัญ
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Percentags = 80.66
%G ใช้รูปแบบ %E แทน% e
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Percentags = 80.66
% o
มันพิมพ์เลขฐานแปดที่ไม่ได้ลงชื่อ
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Octal representation of decimal number 10 = 12
%ยู
มันพิมพ์ตัวเลขทศนิยมที่ไม่ได้ลงชื่อ
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Unsigned 10 = 10
% s
มันพิมพ์สตริงอักขระ
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Name = Sherlock Holmes
% x และ% X
มันพิมพ์เลขฐานสิบหกที่ไม่ได้ลงชื่อ %X รูปแบบใช้อักษรตัวพิมพ์ใหญ่แทนตัวพิมพ์เล็ก
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Hexadecimal representation of decimal number 15 = f
ตอนนี้ให้ใช้% X และสังเกตผลลัพธ์ -
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Hexadecimal representation of decimal number 15 = F
%%
มันพิมพ์เดี่ยว % ตัวละครและไม่มีการแปลงอาร์กิวเมนต์
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Percentags = 80%
พารามิเตอร์เสริมด้วย%
ด้วย % เราสามารถใช้พารามิเตอร์เสริมต่อไปนี้ -
ความกว้าง
ช่องนี้ถูกเพิ่มเข้าไปในไฟล์ width. ตามค่าเริ่มต้นฟิลด์จะถูกบุด้วยช่องว่าง แต่เมื่อใช้แฟล็ก 0 ฟิลด์จะถูกเติมด้วยศูนย์
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Num1 = 10
Num2 = 20
เลขศูนย์นำหน้า
ศูนย์นำหน้าทำหน้าที่เป็นแฟล็กซึ่งบ่งชี้ว่าเอาต์พุตควรถูกเติมด้วยศูนย์แทนช่องว่าง โปรดทราบว่าแฟล็กนี้จะมีผลเฉพาะเมื่อฟิลด์กว้างกว่าค่าที่จะพิมพ์ ตัวอย่างต่อไปนี้อธิบายสิ่งนี้ -
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Num1 = -0010
Num2 = 00020
เหตุผลด้านซ้าย
นิพจน์ควรจัดชิดซ้ายภายในฟิลด์ เมื่อสตริงอินพุตน้อยกว่าจำนวนอักขระที่ระบุและคุณต้องการให้มันถูกทำให้เป็นธรรมกล่าวคือโดยการเพิ่มช่องว่างทางด้านขวาให้ใช้สัญลักษณ์ลบ (-) ตามหลัง% และก่อนตัวเลข
ในตัวอย่างต่อไปนี้เอาต์พุตของคำสั่ง AWK จะถูกส่งไปยังคำสั่ง cat เพื่อแสดงอักขระ END OF LINE ($)
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Num = 10 $
เครื่องหมายคำนำหน้า
คำนำหน้าค่าตัวเลขด้วยเครื่องหมายเสมอแม้ว่าค่านั้นจะเป็นบวกก็ตาม
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Num1 = -10
Num2 = +20
กัญชา
สำหรับ% o จะให้ศูนย์นำหน้า สำหรับ% x และ% X จะให้ 0x หรือ 0X นำหน้าตามลำดับเฉพาะในกรณีที่ผลลัพธ์ไม่เป็นศูนย์ สำหรับ% e,% E,% f และ% F ผลลัพธ์จะมีจุดทศนิยมเสมอ สำหรับ% g และ% G เลขศูนย์ต่อท้ายจะไม่ถูกลบออกจากผลลัพธ์ ตัวอย่างต่อไปนี้อธิบายสิ่งนี้ -
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Output
Octal representation = 012
Hexadecimal representation = 0XA