awk gawk - การสแกนรูปแบบและภาษาการประมวลผล
gawk [ POSIX or GNU style options ] -f program-file [ - - ] file . . .
gawk [ POSIX or GNU style options ] [ - - ] program-text file . . .
Gawk เป็นการนำภาษาโปรแกรม AWK ไปใช้ในโครงการ GNU สอดคล้องกับคำจำกัดความของภาษาในมาตรฐาน POSIX 1003.1 เวอร์ชันนี้เป็นไปตามคำอธิบายใน ภาษาการเขียนโปรแกรม AWK โดย Aho, Kernighan และ Weinberger Gawk มีคุณลักษณะเพิ่มเติมที่พบในเวอร์ชันปัจจุบันของ awk ของ Brian Kernighan และส่วนขยายเฉพาะ GNU จำนวนมาก
บรรทัดคำสั่งประกอบด้วยตัวเลือกสำหรับ gawk ตัวมันเอง ข้อความโปรแกรม AWK (หากไม่ได้ระบุผ่านตัวเลือก -f หรือ - -include) และค่าที่มีอยู่ในตัวแปร AWK ที่กำหนดไว้ล่วงหน้า ARGC และ ARGV
หน้าคู่มือนี้ตั้งใจให้สั้นที่สุดเท่าที่จะเป็นไปได้ รายละเอียดทั้งหมดมีอยู่ใน GAWK: การเขียนโปรแกรม AWK ที่มีประสิทธิภาพ และคุณควรดูเรื่องราวทั้งหมดเกี่ยวกับคุณลักษณะเฉพาะใดๆ ที่นั่น หากเป็นไปได้ จะมีการจัดเตรียมลิงก์ไปยังคู่มือเวอร์ชันออนไลน์
ตัวเลือก Gawk อาจเป็นตัวเลือกหนึ่งตัวอักษรแบบ POSIX แบบดั้งเดิม หรือตัวเลือกแบบยาวแบบ GNU ตัวเลือก POSIX เริ่มต้นด้วย “- ” ตัวเดียว ในขณะที่ตัวเลือกแบบยาวเริ่มต้นด้วย “- - ” ตัวเลือกแบบยาวมีให้สำหรับทั้งคุณสมบัติเฉพาะของ GNU และสำหรับคุณสมบัติที่กำหนดโดย POSIX
ตัวเลือกเฉพาะของ Gawk มักจะใช้ในรูปแบบตัวเลือกยาว อาร์กิวเมนต์ของตัวเลือกแบบยาวจะรวมตัวเลือกด้วยเครื่องหมาย = โดยไม่มีช่องว่าง หรืออาจมีให้ในอาร์กิวเมนต์บรรทัดคำสั่งถัดไป ตัวเลือกแบบยาวอาจใช้ตัวย่อได้ ตราบใดที่ตัวย่อยังคงไม่ซ้ำกัน
นอกจากนี้ ทุกตัวเลือกแบบยาวยังมีตัวเลือกแบบสั้นที่สอดคล้องกัน เพื่อให้สามารถใช้ฟังก์ชันของตัวเลือกจากภายในสคริปต์สั่งการได้ #!
Gawk ยอมรับตัวเลือกต่อไปนี้ ตัวเลือกมาตรฐานจะแสดงรายการก่อน ตามด้วยตัวเลือกสำหรับส่วนขยาย gawk ซึ่งแสดงรายการตามตัวอักษรโดยตัวเลือกสั้นๆ
- -file program-file อ่านซอร์สของโปรแกรม AWK จากไฟล์ program-file แทนที่จะอ่านจากอาร์กิวเมนต์บรรทัดคำสั่งแรก อาจใช้ตัวเลือก -f หลายตัวเลือก ไฟล์ที่อ่านด้วย -f จะถือว่าขึ้นต้นด้วยคำสั่ง @namespace "awk" โดยปริยาย
- -field-separator fs ใช้ fs สำหรับตัวคั่นช่องอินพุต (ค่าของตัวแปรที่กำหนดไว้ล่วงหน้า FS) .
กำหนดค่า val ให้กับตัวแปร var ก่อนที่จะเริ่มการทำงานของโปรแกรม ค่าตัวแปรดังกล่าวมีอยู่ในกฎ BEGIN ของโปรแกรม AWK
- -ตัวอักษรเป็นไบต์ ถือว่าข้อมูลที่ป้อนทั้งหมดเป็นอักขระแบบไบต์เดียว ตัวเลือก - -posix จะแทนที่ตัวเลือกนี้
- -traditional ทำงานในโหมด ความเข้ากันได้ ในโหมดความเข้ากันได้ gawk จะทำงานเหมือนกันกับ awk ของ Brian Kernighan; ไม่รู้จักส่วนขยายเฉพาะของ GNU
- -ลิขสิทธิ์ พิมพ์ข้อความข้อมูลลิขสิทธิ์ GNU ฉบับย่อในเอาต์พุตมาตรฐานและออกให้สำเร็จ
พิมพ์รายการตัวแปรส่วนกลาง ประเภท และค่าสุดท้ายที่เรียงลำดับไปยัง ไฟล์ ไฟล์เริ่มต้นคือ awkvars.out ในไดเรกทอรีปัจจุบัน
เปิดใช้งานการแก้ไขข้อบกพร่องของโปรแกรม AWK ตามค่าเริ่มต้น ดีบักเกอร์จะอ่านคำสั่งแบบโต้ตอบจากแป้นพิมพ์ (อินพุตมาตรฐาน) อาร์กิวเมนต์ file ที่เป็นทางเลือกจะระบุไฟล์ที่มีรายการคำสั่งสำหรับดีบักเกอร์เพื่อดำเนินการแบบไม่โต้ตอบ
ในโหมดการดำเนินการนี้ gawk จะโหลดซอร์สโค้ด AWK จากนั้นจะแจ้งคำสั่งแก้ไขจุดบกพร่อง Gawk สามารถดีบักซอร์สโปรแกรม AWK ที่มาพร้อมกับตัวเลือก -f และ - -include เท่านั้น ดีบักเกอร์ได้รับการบันทึกไว้ใน GAWK: การเขียนโปรแกรม AWK ที่มีประสิทธิภาพ; ดู https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger
- -ต้นทางข้อความโปรแกรม ใช้ข้อความโปรแกรมเป็นซอร์สโค้ดของโปรแกรม AWK แต่ละอาร์กิวเมนต์ที่ระบุผ่าน -e จะถือว่าเริ่มต้นด้วยคำสั่ง @namespace "awk" โดยปริยาย
เช่นเดียวกับ -f อย่างไรก็ตาม ตัวเลือกนี้เป็นตัวเลือกสุดท้ายที่ประมวลผล ควรใช้กับสคริปต์ #! โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชัน CGI เพื่อหลีกเลี่ยงการส่งตัวเลือกหรือซอร์สโค้ด (!) ในบรรทัดคำสั่งจาก URL ตัวเลือกนี้ปิดใช้งานการกำหนดตัวแปรบรรทัดคำสั่ง
- -gen-pot สแกนและแยกวิเคราะห์โปรแกรม AWK และสร้างไฟล์รูปแบบ GNU .pot (Portable Object Template) บนเอาต์พุตมาตรฐานพร้อมรายการสำหรับสตริงที่แปลเป็นภาษาท้องถิ่นได้ทั้งหมดใน โปรแกรม. โปรแกรมไม่ได้ดำเนินการเอง
- -help พิมพ์ข้อมูลสรุปสั้นๆ ของตัวเลือกที่มีในเอาต์พุตมาตรฐาน ตามมาตรฐานการเข้ารหัส GNU ตัวเลือกเหล่านี้ทำให้เกิดการออกโดยทันทีและสำเร็จ
โหลดไลบรารีซอร์ส awk ซึ่งจะค้นหาไลบรารีโดยใช้ตัวแปรสภาพแวดล้อม AWKPATH หากการค้นหาครั้งแรกล้มเหลว จะมีความพยายามอีกครั้งหลังจากต่อท้าย .awk ไฟล์จะถูกโหลดเพียงครั้งเดียว (เช่น ไฟล์ที่ซ้ำกันจะถูกตัดออก) และรหัสนั้นไม่ถือเป็นแหล่งที่มาของโปรแกรมหลัก ไฟล์ที่อ่านด้วย - -include จะถือว่าขึ้นต้นด้วยคำสั่ง @namespace "awk" โดยปริยาย
- -trace พิมพ์ชื่อรหัสไบต์ภายในตามที่เรียกใช้เมื่อรันโปรแกรม การติดตามถูกพิมพ์เป็นข้อผิดพลาดมาตรฐาน `` op code'' แต่ละอันนำหน้าด้วยเครื่องหมาย + ในเอาต์พุต
- -load lib โหลดส่วนขยาย gawk จากไลบรารีที่ใช้ร่วมกัน lib ซึ่งจะค้นหาไลบรารีโดยใช้ตัวแปรสภาพแวดล้อม AWKLIBPATH หากการค้นหาครั้งแรกล้มเหลว จะมีความพยายามอีกครั้งหลังจากต่อท้ายส่วนต่อท้ายไลบรารีที่ใช้ร่วมกันที่เป็นค่าเริ่มต้นสำหรับแพลตฟอร์ม รูทีนการเริ่มต้นไลบรารีคาดว่าจะมีชื่อว่า dl_load()
ให้คำเตือนเกี่ยวกับโครงสร้างที่น่าสงสัยหรือไม่สามารถพกพาได้กับการใช้งาน AWK อื่นๆ ดู https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options สำหรับรายการค่าที่เป็นไปได้สำหรับ value
- -bignum บังคับเลขคณิตที่มีความแม่นยำโดยพลการกับตัวเลข ตัวเลือกนี้ไม่มีผลหากไม่ได้คอมไพล์ gawk เพื่อใช้ไลบรารี GNU MPFR และ GMP (ในกรณีเช่นนี้ gawk จะออกคำเตือน)
หมายเหตุ: คุณลักษณะนี้อยู่ในทัณฑ์บน ผู้ดูแล gawk หลักไม่สนับสนุนอีกต่อไป แม้ว่าจะมีสมาชิกในทีมพัฒนาที่สนับสนุนก็ตาม หากสถานการณ์นี้เปลี่ยนไป คุณลักษณะนี้จะถูกลบออกจาก gawk
ตั้งค่า GAWK_NO_MPFR_WARN ในสภาพแวดล้อมเพื่อปิดเสียงคำเตือน
- -ข้อมูลที่ไม่ใช่ทศนิยม รับรู้ค่าฐานแปดและฐานสิบหกในข้อมูลอินพุต ใช้ตัวเลือกนี้อย่างระมัดระวัง!
- -use-lc-numeric บังคับให้ gawk ใช้อักขระจุดทศนิยมของสถานที่เมื่อแยกวิเคราะห์ข้อมูลอินพุต
- -nostalgia มอบช่วงเวลาแห่งความคิดถึงให้กับผู้ใช้ที่รู้สึกแย่เป็นเวลานาน
ส่งออกโปรแกรมเวอร์ชันพิมพ์ที่สวยงามไปยัง ไฟล์ ไฟล์เริ่มต้นคือ awkprof.out ในไดเรกทอรีปัจจุบัน ตัวเลือกนี้แสดงถึง - -ไม่เพิ่มประสิทธิภาพ
- -optimize เปิดใช้งานการเพิ่มประสิทธิภาพเริ่มต้นของ gawk ตามการแสดงภายในของโปรแกรม ตัวเลือกนี้เปิดใช้งานตามค่าเริ่มต้น
เริ่มเซสชันการทำโปรไฟล์ และส่งข้อมูลการทำโปรไฟล์ไปที่ prof-file ค่าเริ่มต้นคือ awkprof.out ในไดเรกทอรีปัจจุบัน โปรไฟล์มีจำนวนการดำเนินการของแต่ละคำสั่งในโปรแกรมในขอบซ้ายและจำนวนการเรียกใช้ฟังก์ชันสำหรับแต่ละฟังก์ชันที่ผู้ใช้กำหนด Gawk ทำงานช้าลงในโหมดนี้ ตัวเลือกนี้แสดงถึง - -ไม่เพิ่มประสิทธิภาพ
- -posix ซึ่งจะเปิดโหมด ความเข้ากันได้ และปิดใช้งานส่วนขยายทั่วไปจำนวนหนึ่ง
- -re-interval เปิดใช้งานการใช้ นิพจน์ช่วงเวลา ในการจับคู่นิพจน์ทั่วไป นิพจน์ช่วงเวลาถูกเปิดใช้งานตามค่าเริ่มต้น แต่ตัวเลือกนี้ยังคงอยู่สำหรับความเข้ากันได้แบบย้อนหลัง
- -no-optimize ปิดใช้งานการเพิ่มประสิทธิภาพเริ่มต้นของ gawk จากการแสดงภายในของโปรแกรม
- -sandbox เรียกใช้ gawk ในโหมด sandbox ปิดใช้งานฟังก์ชัน system() เปลี่ยนเส้นทางอินพุตด้วย getline เอาต์พุต การเปลี่ยนเส้นทางด้วย print และ printf และการโหลดส่วนขยายไดนามิก การดำเนินการคำสั่ง (ผ่านไปป์ไลน์) ก็ถูกปิดใช้งานเช่นกัน
- -lint-old ให้คำเตือนเกี่ยวกับโครงสร้างที่ไม่สามารถพกพาไปยัง UNIX awk เวอร์ชันดั้งเดิมได้
- -version ข้อมูลเวอร์ชันพิมพ์สำหรับสำเนา gawk นี้ในเอาต์พุตมาตรฐาน สิ่งนี้มีประโยชน์เมื่อรายงานจุดบกพร่อง ตามมาตรฐานการเข้ารหัส GNU ตัวเลือกเหล่านี้ทำให้เกิดการออกโดยทันทีและสำเร็จ
ส่งสัญญาณการสิ้นสุดของตัวเลือก สิ่งนี้มีประโยชน์ในการอนุญาตให้มีการโต้แย้งเพิ่มเติมกับโปรแกรม AWK เพื่อเริ่มต้นด้วย "-"
ในโหมดความเข้ากันได้ ตัวเลือกอื่นๆ จะถูกระบุว่าไม่ถูกต้อง แต่จะถูกละเว้น ในการทำงานปกติ ตราบใดที่มีการระบุข้อความโปรแกรม ตัวเลือกที่ไม่รู้จักจะถูกส่งต่อไปยังโปรแกรม AWK ในอาร์เรย์ ARGV เพื่อประมวลผล
สำหรับความเข้ากันได้ของ POSIX อาจใช้ตัวเลือก -W ตามด้วยชื่อตัวเลือกแบบยาว
โปรแกรม AWK ประกอบด้วยลำดับของคำสั่งที่เป็นทางเลือก คำสั่งรูปแบบการดำเนินการ และคำจำกัดความของฟังก์ชันที่เป็นทางเลือก
@include "filename "
@load "filename "
@namespace "name "
pattern { action statements }
function name(parameter list) { statements }Gawk ก่อนอื่นจะอ่านซอร์สของโปรแกรมจาก program-file(s) หากระบุ จากอาร์กิวเมนต์ถึง - -source หรือจากตัวแรกที่ไม่ใช่ - ตัวเลือกอาร์กิวเมนต์ในบรรทัดคำสั่ง ตัวเลือก -f และ - -source อาจใช้หลายครั้งในบรรทัดคำสั่ง Gawk อ่านข้อความของโปรแกรมราวกับว่า ไฟล์โปรแกรม และข้อความต้นฉบับบรรทัดคำสั่งทั้งหมดถูกเชื่อมเข้าด้วยกัน
นอกจากนี้ อาจใช้บรรทัดที่ขึ้นต้นด้วย @include เพื่อรวมไฟล์ต้นฉบับอื่นๆ ไว้ในโปรแกรมของคุณ ซึ่งเทียบเท่ากับการใช้ตัวเลือก - -include
บรรทัดที่ขึ้นต้นด้วย @load อาจใช้เพื่อโหลดฟังก์ชันส่วนขยายลงในโปรแกรมของคุณ ซึ่งเทียบเท่ากับการใช้ตัวเลือก - -load
ตัวแปรสภาพแวดล้อม AWKPATH ระบุเส้นทางการค้นหาเพื่อใช้เมื่อค้นหาไฟล์ต้นฉบับที่ตั้งชื่อด้วยตัวเลือก -f และ - -include หากไม่มีตัวแปรนี้ เส้นทางเริ่มต้นคือ ".:/usr/local/share/awk" (ไดเร็กทอรีจริงอาจแตกต่างกันไป ขึ้นอยู่กับวิธีการสร้างและติดตั้ง gawk) หากชื่อไฟล์ที่กำหนดให้กับตัวเลือก -f มีอักขระ “/ ” แสดงว่าไม่มีพาธ ทำการค้นหา
ตัวแปรสภาพแวดล้อม AWKLIBPATH ระบุเส้นทางการค้นหาที่จะใช้เมื่อค้นหาไฟล์ต้นฉบับที่ตั้งชื่อด้วยตัวเลือก - -load หากไม่มีตัวแปรนี้ เส้นทางเริ่มต้นคือ "/usr/local/lib/gawk" (ไดเรกทอรีจริงอาจแตกต่างกันไป ขึ้นอยู่กับวิธีการสร้างและติดตั้ง gawk)
Gawk รันโปรแกรม AWK ตามลำดับต่อไปนี้ ขั้นแรก การกำหนดตัวแปรทั้งหมดที่ระบุผ่านตัวเลือก -v จะดำเนินการ ถัดไป gawk รวบรวมโปรแกรมเป็นรูปแบบภายใน จากนั้น gawk เรียกใช้โค้ดในกฎ BEGIN (ถ้ามี) จากนั้นอ่านแต่ละไฟล์ที่มีชื่อใน ARGV อาร์เรย์ (สูงสุด ARGV[ARGC-1]) หากไม่มีชื่อไฟล์ในบรรทัดคำสั่ง gawk จะอ่านอินพุตมาตรฐาน
หากชื่อไฟล์ในบรรทัดคำสั่งมีรูปแบบ var=val จะถือว่าเป็นการกำหนดตัวแปร ตัวแปร var จะถูกกำหนดค่าเป็น val (สิ่งนี้เกิดขึ้นหลังจากที่กฎ BEGIN ถูกเรียกใช้แล้ว)
หากค่าขององค์ประกอบเฉพาะของ ARGV ว่างเปล่า ("") ให้ gawk ข้ามไป
สำหรับไฟล์อินพุตแต่ละไฟล์ หากมีกฎ BEGINFILE อยู่ gawk จะดำเนินการโค้ดที่เกี่ยวข้องก่อนที่จะประมวลผลเนื้อหาของไฟล์ ในทำนองเดียวกัน gawk รันโค้ดที่เกี่ยวข้องกับกฎ ENDFILE หลังจากประมวลผลไฟล์
สำหรับแต่ละระเบียนในอินพุต gawk จะทดสอบเพื่อดูว่าตรงกับ รูปแบบ ใดๆ ในโปรแกรม AWK หรือไม่ สำหรับแต่ละรูปแบบที่บันทึกตรงกัน gawk ดำเนินการ การกระทำ ที่เกี่ยวข้อง รูปแบบจะได้รับการทดสอบตามลำดับที่เกิดขึ้นในโปรแกรม
สุดท้าย หลังจากอินพุตหมด gawk รันโค้ดในกฎ END (ถ้ามี)
ตาม POSIX ไฟล์ที่มีชื่อในบรรทัดคำสั่ง awk จะต้องเป็นไฟล์ข้อความ พฤติกรรมจะ ``ไม่ได้กำหนด'' หากไม่เป็นเช่นนั้น awk เวอร์ชันส่วนใหญ่ถือว่าไดเร็กทอรีบนบรรทัดคำสั่งเป็นข้อผิดพลาดร้ายแรง
สำหรับ gawk ไดเร็กทอรีในบรรทัดคำสั่งจะสร้างคำเตือน แต่จะถูกข้ามไป หากมีตัวเลือก - -posix หรือ - -ดั้งเดิม อย่างใดอย่างหนึ่ง gawk จะเปลี่ยนกลับเป็นการรักษาไดเรกทอรีในบรรทัดคำสั่งว่าเป็นข้อผิดพลาดร้ายแรง .
ตัวแปร AWK เป็นไดนามิก; สิ่งเหล่านี้เกิดขึ้นเมื่อมีการใช้ครั้งแรก ค่าเหล่านี้เป็นตัวเลขทศนิยมหรือสตริง หรือทั้งสองอย่าง ขึ้นอยู่กับวิธีการใช้ นอกจากนี้ gawk ยังอนุญาตให้ตัวแปรมีประเภทนิพจน์ทั่วไป AWK ยังมีอาร์เรย์หนึ่งมิติ อาร์เรย์ที่มีหลายมิติอาจจำลองได้ อย่างไรก็ตาม gawk ให้อาร์เรย์ของอาร์เรย์ที่แท้จริง ตัวแปรที่กำหนดไว้ล่วงหน้าหลายตัวถูกตั้งค่าเมื่อโปรแกรมทำงาน สิ่งเหล่านี้ได้รับการอธิบายตามความจำเป็นและสรุปไว้ด้านล่าง
โดยปกติแล้ว ระเบียนจะถูกคั่นด้วยอักขระขึ้นบรรทัดใหม่ คุณสามารถควบคุมวิธีการแยกบันทึกได้โดยกำหนดค่าให้กับตัวแปรในตัว RS ดู https://www.gnu.org/software/gawk/manual/html_node/Records.html สำหรับรายละเอียด
เมื่ออ่านบันทึกอินพุตแต่ละรายการ gawk จะแยกบันทึกออกเป็น ฟิลด์ โดยใช้ค่าของตัวแปร FS เป็นตัวคั่นฟิลด์ นอกจากนี้ อาจใช้ FIELDWIDTHS และ FPAT เพื่อควบคุมการแยกช่องอินพุต ดูรายละเอียดเริ่มต้นที่ https://www.gnu.org/software/gawk/manual/html_node/Fields.html
แต่ละช่องในบันทึกอินพุตอาจอ้างอิงตามตำแหน่ง: $1, $2 และอื่นๆ $0 คือระเบียนทั้งหมด รวมถึงช่องว่างนำหน้าและต่อท้าย
ตัวแปร NF ถูกตั้งค่าเป็นจำนวนฟิลด์ทั้งหมดในบันทึกอินพุต
การอ้างอิงถึงฟิลด์ที่ไม่มีอยู่จริง (เช่น ฟิลด์ที่อยู่หลัง $NF) จะสร้างสตริงว่าง อย่างไรก็ตาม การกำหนดให้กับฟิลด์ที่ไม่มีอยู่จริง (เช่น $ (NF+2)=5) เพิ่มค่าของ NF สร้างฟิลด์แทรกใดๆ ที่มีค่าว่าง สตริงเป็นค่าและทำให้ค่าของ $0 ถูกคำนวณใหม่ โดยฟิลด์จะถูกคั่นด้วยค่าของ OFS การอ้างอิงถึงช่องที่มีเลขติดลบทำให้เกิดข้อผิดพลาดร้ายแรง การลดค่า NF ทำให้ค่าของฟิลด์ที่ผ่านค่าใหม่หายไป และค่าของ $0 จะถูกคำนวณใหม่ โดยฟิลด์จะถูกคั่นด้วยค่าของ อ๊อฟส.
การกำหนดค่าให้กับฟิลด์ที่มีอยู่ทำให้เรกคอร์ดทั้งหมดถูกสร้างขึ้นใหม่เมื่อมีการอ้างอิง $0 ในทำนองเดียวกัน การกำหนดค่าให้กับ $0 ทำให้ระเบียนถูกแบ่งใหม่ ทำให้เกิดค่าใหม่สำหรับฟิลด์
ตัวแปรบิวด์อินของ Gawk แสดงอยู่ด้านล่าง รายการนี้เป็นรายการสั้นโดยเจตนา สำหรับรายละเอียด โปรดดูที่ https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables
จำนวนอาร์กิวเมนต์บรรทัดคำสั่ง
ดัชนีใน ARGV ของไฟล์ปัจจุบันที่กำลังประมวลผล
อาร์เรย์ของอาร์กิวเมนต์บรรทัดคำสั่ง อาร์เรย์จัดทำดัชนีตั้งแต่ 0 ถึง ARGC - 1
บนระบบที่ไม่ใช่ POSIX ให้ระบุการใช้โหมด "ไบนารี" สำหรับ I/O ไฟล์ทั้งหมด ดู https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html สำหรับรายละเอียด
รูปแบบการแปลงสำหรับตัวเลข "%.6g" โดยค่าเริ่มต้น
อาร์เรย์ที่มีค่าของสภาพแวดล้อมปัจจุบัน อาร์เรย์จัดทำดัชนีโดยตัวแปรสภาพแวดล้อม แต่ละองค์ประกอบเป็นค่าของตัวแปรนั้น
หากระบบเกิดข้อผิดพลาดในการเปลี่ยนเส้นทางสำหรับ getline ระหว่างการอ่านสำหรับ getline หรือระหว่าง close() จากนั้น ERRNO ถูกตั้งค่าเป็นสตริงที่อธิบายถึงข้อผิดพลาด ค่านี้ขึ้นอยู่กับการแปลในภาษาที่ไม่ใช่ภาษาอังกฤษ
รายการความกว้างของฟิลด์ที่คั่นด้วยช่องว่าง เมื่อตั้งค่า gawk จะแยกวิเคราะห์อินพุตในช่องที่มีความกว้างคงที่ แทนที่จะใช้ค่าของตัวแปร FS เป็นตัวคั่นช่อง ความกว้างของช่องแต่ละช่องอาจนำหน้าด้วยค่าที่คั่นด้วยโคลอน ซึ่งระบุจำนวนอักขระที่จะข้ามก่อนที่ช่องจะเริ่มต้น
ชื่อของไฟล์อินพุตปัจจุบัน หากไม่มีการระบุไฟล์ในบรรทัดคำสั่ง ค่าของ FILENAME จะเป็น "- " อย่างไรก็ตาม FILENAME ไม่ได้กำหนดไว้ในกฎ BEGIN (เว้นแต่จะตั้งค่าโดย getline)
หมายเลขบันทึกอินพุตในไฟล์อินพุตปัจจุบัน
นิพจน์ทั่วไปที่อธิบายเนื้อหาของฟิลด์ในเรกคอร์ด เมื่อตั้งค่าแล้ว gawk จะแยกวิเคราะห์อินพุตในช่อง โดยที่ช่องจะตรงกับนิพจน์ทั่วไป แทนที่จะใช้ค่า FS เป็นตัวคั่นช่อง
ตัวคั่นฟิลด์อินพุต ช่องว่างตามค่าเริ่มต้น ดู https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html สำหรับรายละเอียด
อาร์เรย์ที่มีดัชนีและค่าที่สอดคล้องกันคือชื่อของฟังก์ชันที่ผู้ใช้กำหนดเองหรือส่วนขยายทั้งหมดในโปรแกรม หมายเหตุ: คุณไม่สามารถใช้คำสั่ง ลบ กับอาร์เรย์ FUNCTAB
ควบคุมตัวพิมพ์เล็กและใหญ่ของการดำเนินการนิพจน์ทั่วไปและสตริงทั้งหมด ดูรายละเอียดได้ที่ https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html
ให้การควบคุมแบบไดนามิกของตัวเลือก - -lint จากภายในโปรแกรม AWK
จำนวนฟิลด์ในบันทึกอินพุตปัจจุบัน
จำนวนบันทึกอินพุตทั้งหมดที่เห็นจนถึงตอนนี้
รูปแบบเอาต์พุตสำหรับตัวเลข "%.6g" โดยค่าเริ่มต้น
ตัวคั่นฟิลด์เอาต์พุต ช่องว่างตามค่าเริ่มต้น
ตัวคั่นบันทึกเอาต์พุต โดยค่าเริ่มต้นจะขึ้นบรรทัดใหม่
ความแม่นยำในการทำงานของตัวเลขทศนิยมที่มีความแม่นยำตามอำเภอใจ 53 โดยค่าเริ่มต้น
องค์ประกอบของอาร์เรย์นี้ให้การเข้าถึงข้อมูลเกี่ยวกับโปรแกรม AWK ที่กำลังทำงานอยู่ ดู https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset สำหรับรายละเอียด
โหมดการปัดเศษที่ใช้สำหรับเลขคณิตที่มีความแม่นยำตามอำเภอใจสำหรับตัวเลข ตามค่าเริ่มต้น "N" (โหมด IEEE-754 roundTiesToEven) ดูรายละเอียดได้ที่ https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode
ตัวคั่นบันทึกอินพุต โดยค่าเริ่มต้นจะขึ้นบรรทัดใหม่
ตัวยุติการบันทึก Gawk ตั้งค่า RT เป็นข้อความอินพุตที่ตรงกับอักขระหรือนิพจน์ทั่วไปที่ระบุโดย RS
ดัชนีของอักขระตัวแรกที่จับคู่โดย match(); 0 ถ้าไม่ตรงกัน
ความยาวของสตริงที่จับคู่โดย match(); -1 ถ้าไม่ตรงกัน
สตริงที่ใช้ในการแยกตัวห้อยหลายตัวในองค์ประกอบอาร์เรย์ ตามค่าเริ่มต้น "\034"
อาร์เรย์ที่มีดัชนีเป็นชื่อของตัวแปรและอาร์เรย์ทั่วโลกที่กำหนดไว้ในปัจจุบันทั้งหมดในโปรแกรม คุณไม่สามารถใช้คำสั่ง ลบ กับอาร์เรย์ SYMTAB หรือกำหนดให้องค์ประกอบที่มีดัชนีที่ไม่ใช่ชื่อตัวแปร
โดเมนข้อความของโปรแกรม AWK ใช้เพื่อค้นหาการแปลภาษาสำหรับสตริงของโปรแกรม
อาร์เรย์ถูกห้อยด้วยนิพจน์ระหว่างวงเล็บเหลี่ยม ([ และ ]) หากนิพจน์เป็นรายการนิพจน์ (expr, expr . . .) ดังนั้นตัวห้อยอาร์เรย์จะเป็นสตริงที่ประกอบด้วยการต่อค่า (สตริง) ของแต่ละนิพจน์ คั่นด้วยค่าของตัวแปร SUBSEP สิ่งอำนวยความสะดวกนี้ใช้เพื่อจำลองอาร์เรย์หลายมิติ ตัวอย่างเช่น:
i = "A"; j = "B"; k = "C"
x[i, j, k] = "hello, world\n"
กำหนดสตริง "hello, world\n" ให้กับองค์ประกอบของอาร์เรย์ x ซึ่งจัดทำดัชนีโดยสตริง "A\034B\034C" . อาร์เรย์ทั้งหมดใน AWK เป็นแบบเชื่อมโยง กล่าวคือ จัดทำดัชนีโดยค่าสตริง
อาจใช้โอเปอเรเตอร์พิเศษ ใน เพื่อทดสอบว่าอาร์เรย์มีดัชนีที่ประกอบด้วยค่าเฉพาะหรือไม่:
if (val in array) print array[val]
หากอาร์เรย์มีตัวห้อยหลายตัว ให้ใช้ (i, j) ในอาร์เรย์
โครงสร้าง in อาจใช้ในลูป for เพื่อวนซ้ำองค์ประกอบทั้งหมดของอาร์เรย์ อย่างไรก็ตาม โครงสร้าง (i, j) ในอาร์เรย์ใช้ได้เฉพาะในการทดสอบ ไม่ใช่ในลูป for
องค์ประกอบอาจถูกลบออกจากอาร์เรย์โดยใช้คำสั่ง ลบ คำสั่ง ลบ อาจใช้เพื่อลบเนื้อหาทั้งหมดของอาร์เรย์ เพียงแค่ระบุชื่ออาร์เรย์โดยไม่ต้องมีตัวห้อย
gawk รองรับอาร์เรย์หลายมิติที่แท้จริง ไม่จำเป็นต้องให้อาร์เรย์ดังกล่าวเป็น ``สี่เหลี่ยมผืนผ้า'' เหมือนใน C หรือ C++ ดูรายละเอียดได้ที่ https://www.gnu.org/software/gawk/manual/html_node/Arrays
Gawk จัดเตรียมสิ่งอำนวยความสะดวก เนมสเปซ ที่เรียบง่ายเพื่อช่วยหลีกเลี่ยงข้อเท็จจริงที่ว่าตัวแปรทั้งหมดใน AWK นั้นเป็นส่วนกลาง
ชื่อที่ถูกต้อง ประกอบด้วยตัวระบุอย่างง่ายสองตัวที่ต่อด้วยเครื่องหมายทวิภาคคู่ (::) ตัวระบุทางซ้ายแทนเนมสเปซและตัวระบุทางขวาคือตัวแปรที่อยู่ภายใน ชื่อที่เรียบง่าย (ไม่ผ่านการรับรอง) ทั้งหมดจะถือว่าอยู่ในเนมสเปซ ``ปัจจุบัน'' เนมสเปซเริ่มต้นคือ awk อย่างไรก็ตาม ตัวระบุอย่างง่ายที่ประกอบด้วยตัวพิมพ์ใหญ่เพียงอย่างเดียวจะถูกบังคับให้อยู่ในเนมสเปซ awk แม้ว่าเนมสเปซปัจจุบันจะแตกต่างกันก็ตาม
คุณเปลี่ยนเนมสเปซปัจจุบันด้วยคำสั่ง @namespace " name "
ชื่อฟังก์ชันในตัวมาตรฐานที่กำหนดไว้ล่วงหน้าไม่สามารถใช้เป็นชื่อเนมสเปซได้ ชื่อของฟังก์ชันเพิ่มเติมที่มีให้โดย gawk อาจใช้เป็นชื่อเนมสเปซหรือเป็นตัวระบุอย่างง่ายในเนมสเปซอื่นๆ สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces
ตัวแปรและฟิลด์อาจเป็นตัวเลข (จุดทศนิยม) หรือสตริง หรือทั้งสองอย่าง นอกจากนี้ยังอาจเป็นนิพจน์ทั่วไป วิธีตีความค่าของตัวแปรขึ้นอยู่กับบริบท หากใช้ในนิพจน์ตัวเลข จะถือว่าเป็นตัวเลข หากใช้เป็นสตริงจะถือว่าเป็นสตริง
ในการบังคับตัวแปรให้ถือว่าเป็นตัวเลข ให้เพิ่มศูนย์เข้าไป หากต้องการบังคับให้ถือว่าเป็นสตริง ให้เชื่อมสตริงนั้นกับสตริง null
ตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นมีค่าตัวเลขเป็นศูนย์และค่าสตริง "" (ค่าว่างหรือสตริงว่าง)
เมื่อสตริงต้องแปลงเป็นตัวเลข การแปลงทำได้โดยใช้ strtod(3) ตัวเลขจะถูกแปลงเป็นสตริงโดยใช้ค่า CONVFMT เป็นสตริงรูปแบบสำหรับ sprintf(3) โดยมีค่าตัวเลขของตัวแปรเป็นอาร์กิวเมนต์ อย่างไรก็ตาม แม้ว่าตัวเลขทั้งหมดใน AWK จะเป็นเลขทศนิยม แต่ค่าอินทิกรัลจะถูกแปลงเป็นจำนวนเต็มเสมอ
Gawk ทำการเปรียบเทียบดังนี้: หากตัวแปรสองตัวเป็นตัวเลข ตัวแปรทั้งสองจะถูกเปรียบเทียบเป็นตัวเลข หากค่าหนึ่งเป็นตัวเลขและอีกค่าหนึ่งมีค่าสตริงที่เป็น "สตริงตัวเลข" การเปรียบเทียบจะทำเป็นตัวเลขด้วย มิฉะนั้น ค่าตัวเลขจะถูกแปลงเป็นสตริงและดำเนินการเปรียบเทียบสตริง แน่นอนว่ามีการเปรียบเทียบสองสายเป็นสตริง
โปรดทราบว่าค่าคงที่ของสตริง เช่น "57" เป็น ไม่ใช่ สตริงที่เป็นตัวเลข แต่เป็นค่าคงที่ของสตริง แนวคิดของ "สตริงตัวเลข" ใช้กับฟิลด์, อินพุต getline, FILENAME, องค์ประกอบ ARGV, องค์ประกอบ ENVIRON เท่านั้น และองค์ประกอบของอาร์เรย์ที่สร้างโดย split() หรือ patsplit() ที่เป็นสตริงตัวเลข แนวคิดพื้นฐานคือ การป้อนข้อมูลของผู้ใช้ และเฉพาะการป้อนข้อมูลของผู้ใช้เท่านั้น ที่ดูเป็นตัวเลข ควรได้รับการปฏิบัติเช่นนั้น
คุณสามารถใช้ค่าคงที่ฐานแปดและฐานสิบหกสไตล์ C ในซอร์สโค้ดโปรแกรม AWK ของคุณ ตัวอย่างเช่น ค่าฐานแปด 011 เท่ากับทศนิยม 9 และค่าเลขฐานสิบหก 0x11 เท่ากับ 17 ทศนิยม
ค่าคงที่ของสตริงใน AWK คือลำดับของอักขระที่อยู่ในอัญประกาศคู่ (เช่น "value") ภายในสตริง ระบบจะรู้จักลำดับการหลบหนีบางอย่าง เช่นใน C โปรดดู https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences สำหรับ รายละเอียด.
ค่าคงที่ของนิพจน์ทั่วไปคือลำดับของอักขระที่อยู่ระหว่างเครื่องหมายทับ (เช่น /value/)
Escape Sequences ที่อธิบายไว้ในคู่มือยังอาจใช้ภายในนิพจน์ทั่วไปแบบคงที่ (เช่น /[ \t\f\n\r\v]/ จับคู่อักขระช่องว่าง)
Gawk ให้ค่าคงที่นิพจน์ทั่วไป พิมพ์อย่างยิ่ง ซึ่งเขียนด้วยสัญลักษณ์ @ นำหน้า (เช่น @/value/) ค่าคงที่ดังกล่าวอาจถูกกำหนดให้กับสเกลาร์ (ตัวแปร องค์ประกอบอาร์เรย์) และส่งผ่านไปยังฟังก์ชันที่ผู้ใช้กำหนด ตัวแปรที่ถูกกำหนดให้เป็นประเภทนิพจน์ทั่วไป
AWK เป็นภาษาที่เน้นบรรทัด รูปแบบมาก่อนแล้วตามด้วยการกระทำ คำสั่งการดำเนินการจะอยู่ใน { และ } รูปแบบอาจหายไปหรือการดำเนินการอาจหายไป แต่แน่นอนว่าไม่ใช่ทั้งสองอย่าง หากไม่มีรูปแบบ การดำเนินการจะดำเนินการสำหรับบันทึกอินพุตทุกรายการ การกระทำที่ขาดหายไปเทียบเท่ากับ
{ print }ซึ่งพิมพ์บันทึกทั้งหมด
ความคิดเห็นขึ้นต้นด้วยอักขระ # และดำเนินต่อไปจนสุดบรรทัด อาจใช้บรรทัดว่างเพื่อแยกงบ โดยปกติแล้ว คำสั่งจะลงท้ายด้วยบรรทัดใหม่ อย่างไรก็ตาม นี่ไม่ใช่กรณีสำหรับบรรทัดที่ลงท้ายด้วยเครื่องหมายจุลภาค {, ?, :, && หรือ || บรรทัดที่ลงท้ายด้วย do หรือ else จะมีคำสั่งต่อโดยอัตโนมัติในบรรทัดต่อไปนี้ ในกรณีอื่นๆ สามารถต่อบรรทัดได้โดยลงท้ายด้วย “\ ” ซึ่งในกรณีนี้จะไม่สนใจการขึ้นบรรทัดใหม่ อย่างไรก็ตาม “\ ” หลัง # ไม่ใช่สิ่งพิเศษ
อาจใส่ข้อความหลายคำสั่งในบรรทัดเดียวโดยคั่นด้วยเครื่องหมาย “; ". สิ่งนี้ใช้กับทั้งข้อความภายในส่วนการดำเนินการของคู่รูปแบบการดำเนินการ (กรณีปกติ) และกับคำสั่งรูปแบบการดำเนินการเอง
รูปแบบ AWK อาจเป็นหนึ่งในสิ่งต่อไปนี้:
BEGIN END BEGINFILE ENDFILE /regular expression/ relational expression pattern && pattern pattern || pattern pattern ? pattern : pattern (pattern) ! pattern pattern1, pattern2
BEGIN และ END เป็นรูปแบบพิเศษสองประเภทที่ไม่ได้ทดสอบกับอินพุต ส่วนการดำเนินการของรูปแบบ BEGIN ทั้งหมดจะถูกรวมเข้าด้วยกันราวกับว่าข้อความทั้งหมดถูกเขียนขึ้นในกฎ BEGIN เดียว พวกมันจะถูกดำเนินการก่อนที่จะอ่านอินพุตใดๆ ในทำนองเดียวกัน กฎ END ทั้งหมดจะถูกรวมเข้าด้วยกัน และดำเนินการเมื่ออินพุตทั้งหมดหมดลง (หรือเมื่อคำสั่ง ออก ถูกดำเนินการ) รูปแบบ BEGIN และ END ไม่สามารถใช้ร่วมกับรูปแบบอื่นๆ ในการแสดงรูปแบบ รูปแบบ BEGIN และ END ต้องไม่มีส่วนการทำงานขาดหายไป
BEGINFILE และ ENDFILE เป็นรูปแบบพิเศษเพิ่มเติมที่มีการดำเนินการก่อนที่จะอ่านบันทึกแรกของแต่ละไฟล์อินพุตบรรทัดคำสั่ง และหลังจากอ่านบันทึกสุดท้ายของแต่ละไฟล์ ภายในกฎ BEGINFILE ค่าของ ERRNO คือสตริงว่างหากเปิดไฟล์สำเร็จ มิฉะนั้น จะมีปัญหากับไฟล์และรหัสควรใช้ nextfile เพื่อข้ามไป หากไม่ดำเนินการ gawk จะสร้างข้อผิดพลาดร้ายแรงตามปกติสำหรับไฟล์ที่ไม่สามารถเปิดได้
สำหรับรูปแบบ /นิพจน์ทั่วไป/ คำสั่งที่เกี่ยวข้องจะถูกดำเนินการสำหรับบันทึกอินพุตแต่ละรายการที่ตรงกับนิพจน์ทั่วไป นิพจน์ทั่วไปนั้นเหมือนกับใน egrep(1) ดู https://www.gnu.org/software/gawk/manual/html_node/Regexp.html สำหรับรายละเอียดเกี่ยวกับนิพจน์ทั่วไป
นิพจน์เชิงสัมพันธ์ อาจใช้ตัวดำเนินการใด ๆ ที่กำหนดไว้ด้านล่างในส่วนเกี่ยวกับการกระทำ โดยทั่วไปจะทดสอบว่าบางฟิลด์ตรงกับนิพจน์ทั่วไปหรือไม่
ตัวดำเนินการ &&, || และ ! เป็นตรรกะ AND ตรรกะ OR และตรรกะ NOT ตามลำดับ เช่นเดียวกับใน C พวกเขาทำสั้น - การประเมินวงจรเช่นเดียวกับใน C และใช้สำหรับการรวมการแสดงออกของรูปแบบดั้งเดิมมากขึ้น ในภาษาส่วนใหญ่ วงเล็บอาจใช้เพื่อเปลี่ยนลำดับการประเมิน
การ? : ตัวดำเนินการเหมือนกับตัวดำเนินการเดียวกันใน C ถ้ารูปแบบแรกเป็นจริง รูปแบบที่ใช้ทดสอบจะเป็นรูปแบบที่สอง มิฉะนั้นจะเป็นรูปแบบที่สาม ประเมินรูปแบบที่สองและสามรูปแบบใดรูปแบบหนึ่งเท่านั้น
รูปแบบ pattern1, pattern2 ของนิพจน์เรียกว่า รูปแบบช่วง โดยจะจับคู่ระเบียนอินพุตทั้งหมดที่เริ่มต้นด้วยระเบียนที่ตรงกับ pattern1 และดำเนินการต่อไปจนถึงระเบียนที่ตรงกับ pattern2 รวมอยู่ด้วย ไม่รวมกับการแสดงออกของรูปแบบอื่น ๆ
คำสั่งการดำเนินการอยู่ในวงเล็บปีกกา { และ } คำสั่งการดำเนินการประกอบด้วยคำสั่งการกำหนดเงื่อนไขและการวนซ้ำตามปกติที่พบในภาษาส่วนใหญ่ ตัวดำเนินการ คำสั่งควบคุม และคำสั่งอินพุต/เอาท์พุตที่มีให้ตามรูปแบบใน C
ตัวดำเนินการใน AWK ตามลำดับความสำคัญลดลงคือ:
การจัดกลุ่ม
การอ้างอิงฟิลด์
เพิ่มขึ้นและลดลงทั้งคำนำหน้าและคำหลัง
ยกกำลัง
เอกนารีบวก เอกนารีลบ และนิเสธเชิงตรรกศาสตร์
การคูณ การหาร และโมดูลัส
การบวกและการลบ.
การต่อสตริง
I/O แบบท่อสำหรับ getline print และ printf
ตัวดำเนินการเชิงสัมพันธ์ปกติ
การจับคู่นิพจน์ทั่วไป การจับคู่เชิงลบ
สมาชิกอาร์เรย์
ตรรกะและ
ตรรกะหรือ
นิพจน์เงื่อนไข C มีรูปแบบ expr1 ? expr2 : expr3 . ถ้า expr1 เป็นจริง ค่าของนิพจน์คือ expr2 มิฉะนั้นจะเป็น expr3 expr2 และ expr3 รายการเดียวเท่านั้นที่ได้รับการประเมิน
งานที่มอบหมาย. ทั้งการกำหนดแบบสัมบูรณ์ (var=value) และการมอบหมายตัวดำเนินการ (อื่นๆ แบบฟอร์ม) ได้รับการสนับสนุน
ข้อความควบคุมมีดังนี้:
if (condition) statement [ else statement ] while (condition) statement do statement while (condition) for (expr1; expr2; expr3) statement for (var in array) statement break continue delete array [ index ] delete array exit [ expression ] { statements } switch (expression) { case value|regex : statement . . . [ default: statement ] }
คำสั่งอินพุต/เอาท์พุตมีดังนี้:
ปิดไฟล์ที่เปิดอยู่ ไปป์ หรือกระบวนการร่วม ควรใช้ วิธี ที่เป็นทางเลือกเฉพาะเมื่อปิดปลายด้านหนึ่งของท่อสองทางเข้ากับกระบวนการร่วม ต้องเป็นค่าสตริง "ถึง" หรือ "จาก"
กำหนด $0 จากบันทึกอินพุตถัดไป ตั้งค่า NF, NR, FNR, RT
ตั้ง $0 จากบันทึกถัดไปของ file ตั้งค่า NF, RT
ตั้งค่า var จากบันทึกอินพุตถัดไป ตั้งค่า NR FNR RT
ตั้งค่า var จากบันทึกถัดไปของ file; ตั้ง RT
เรียกใช้ command โดยวางเอาต์พุตเป็น $0 หรือ var ตามด้านบน และ RT
เรียกใช้ คำสั่ง เป็นกระบวนการร่วมที่ส่งเอาต์พุตเป็น $0 หรือ var ตามด้านบน และ RT (คำสั่งยังสามารถเป็นซ็อกเก็ตได้อีกด้วย ดูส่วนย่อย ชื่อไฟล์พิเศษ ด้านล่าง)
ล้างบัฟเฟอร์ที่เกี่ยวข้องกับไฟล์ผลลัพธ์ที่เปิดอยู่หรือไพพ์ไฟล์ หาก ไฟล์ หายไปหรือหากเป็นสตริงว่าง ให้ล้างไฟล์เอาต์พุตและไพพ์ที่เปิดอยู่ทั้งหมด
หยุดการประมวลผลบันทึกอินพุตปัจจุบัน อ่านบันทึกอินพุตถัดไปและเริ่มประมวลผลใหม่ด้วยรูปแบบแรกในโปรแกรม AWK เมื่อถึงจุดสิ้นสุดของข้อมูลที่ป้อน ให้ดำเนินการกฎ END ใดๆ
หยุดการประมวลผลไฟล์อินพุตปัจจุบัน การอ่านบันทึกอินพุตถัดไปมาจากไฟล์อินพุตถัดไป อัปเดต FILENAME และ ARGIND รีเซ็ต FNR เป็น 1 และเริ่มประมวลผลใหม่ด้วยรูปแบบแรกในโปรแกรม AWK เมื่อถึงจุดสิ้นสุดของข้อมูลที่ป้อน ให้ดำเนินการกฎ ENDFILE และ END
พิมพ์บันทึกปัจจุบัน บันทึกเอาต์พุตจะสิ้นสุดด้วยค่า ORS
พิมพ์นิพจน์ แต่ละนิพจน์คั่นด้วยค่า OFS บันทึกเอาต์พุตจะสิ้นสุดด้วยค่า ORS
พิมพ์นิพจน์ใน ไฟล์ แต่ละนิพจน์คั่นด้วยค่า OFS บันทึกเอาต์พุตจะสิ้นสุดด้วยค่า ORS
จัดรูปแบบและพิมพ์
จัดรูปแบบและพิมพ์บนไฟล์
ดำเนินการคำสั่ง cmd-line และส่งคืนสถานะการออก (อาจไม่มีในระบบที่ไม่ใช่ POSIX) ดู https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions สำหรับ รายละเอียดทั้งหมดเกี่ยวกับสถานะการออก
อนุญาตให้มีการเปลี่ยนทิศทางเอาต์พุตเพิ่มเติมสำหรับ print และ printf
ต่อท้ายผลลัพธ์ไปยัง ไฟล์
เขียนบนท่อ
ส่งข้อมูลไปยังโปรเซสเซอร์ร่วมหรือซ็อกเก็ต (ดูส่วนย่อย ชื่อไฟล์พิเศษ ด้านล่างด้วย)
คำสั่ง getline คืนค่า 1 เมื่อสำเร็จ เป็นศูนย์เมื่อสิ้นสุดไฟล์ และ -1 เมื่อเกิดข้อผิดพลาด หากค่า errno(3) ระบุว่าการดำเนินการ I/O อาจถูกลองใหม่ และ PROCINFO["input ", " RETRY"] ถูกตั้งค่า จากนั้น -2 จะถูกส่งกลับแทนที่จะเป็น -1 และอาจมีการพยายามโทรหา getline เพิ่มเติม เมื่อเกิดข้อผิดพลาด ERRNO จะถูกตั้งค่าเป็นสตริงที่อธิบายถึงปัญหา
หมายเหตุ: ความล้มเหลวในการเปิดซ็อกเก็ตแบบสองทางส่งผลให้มีข้อผิดพลาดที่ไม่ร้ายแรงถูกส่งกลับไปยังฟังก์ชันการโทร หากใช้ไพพ์ โพรเซสร่วม หรือซ็อกเก็ตไปยัง getline หรือจาก print หรือ printf ภายในลูป คุณต้อง ใช้ close() เพื่อสร้างอินสแตนซ์ใหม่ของคำสั่งหรือซ็อกเก็ต AWK ไม่ปิดไพพ์ ซ็อกเก็ต หรือกระบวนการร่วมโดยอัตโนมัติเมื่อส่งคืน EOF
คำสั่ง printf เวอร์ชัน AWK และฟังก์ชัน sprintf() คล้ายกับเวอร์ชัน C สำหรับรายละเอียด โปรดดูที่ https://www.gnu.org/ ซอฟต์แวร์/gawk/manual/html_node/Printf.html
เมื่อเปลี่ยนเส้นทาง I/O จาก print หรือ printf ไปยังไฟล์ หรือผ่าน getline จากไฟล์ gawk จดจำชื่อไฟล์พิเศษบางอย่างภายใน ชื่อไฟล์เหล่านี้อนุญาตให้เข้าถึงตัวอธิบายไฟล์แบบเปิดที่สืบทอดมาจากกระบวนการหลักของ gawk (โดยปกติจะเป็นเชลล์) ชื่อไฟล์เหล่านี้อาจใช้ในบรรทัดคำสั่งเพื่อตั้งชื่อไฟล์ข้อมูล ชื่อไฟล์คือ:
อินพุตมาตรฐาน
อินพุตมาตรฐาน
เอาต์พุตมาตรฐาน
เอาต์พุตข้อผิดพลาดมาตรฐาน
ไฟล์ที่เกี่ยวข้องกับตัวอธิบายไฟล์เปิด n
ชื่อไฟล์พิเศษต่อไปนี้อาจใช้กับตัวดำเนินการประมวลผลร่วม |& เพื่อสร้างการเชื่อมต่อเครือข่าย TCP/IP:
/inet/tcp/lport/rhost/rport /inet4/tcp/lport/rhost/rport /inet6/tcp/lport/rhost/rport
ไฟล์สำหรับการเชื่อมต่อ TCP/IP บนพอร์ตโลคัล lport ไปยังโฮสต์ระยะไกล rhost บนพอร์ตระยะไกล rport ใช้พอร์ต 0 เพื่อให้ระบบเลือกพอร์ต ใช้ /inet4 เพื่อบังคับการเชื่อมต่อ IPv4 และ /inet6 เพื่อบังคับการเชื่อมต่อ IPv6 ธรรมดา /inet ใช้ค่าเริ่มต้นของระบบ (ส่วนใหญ่น่าจะเป็น IPv4) ใช้ได้กับตัวดำเนินการ I/O สองทาง |& เท่านั้น
/inet/udp/lport/rhost/rport /inet4/udp/lport/rhost/rport /inet6/udp/lport/rhost/rport
คล้ายกัน แต่ใช้ UDP/IP แทน TCP/IP
AWK มีฟังก์ชันทางคณิตศาสตร์ในตัวดังต่อไปนี้:
คืนค่าอาร์กแทนเจนต์ของ y/x เป็นเรเดียน
ส่งกลับค่าโคไซน์ของ expr ซึ่งมีหน่วยเป็นเรเดียน
ฟังก์ชันเลขชี้กำลัง
ตัดทอนเป็นจำนวนเต็ม
ตัดทอน num และ denom เป็นจำนวนเต็ม ส่งกลับผลหารของ num หารด้วย denom ใน ผลลัพธ์["quotient"] และส่วนที่เหลือใน ผลลัพธ์["ส่วนที่เหลือ"] นี่คือส่วนขยาย gawk โดยหลักเป็นค่าเมื่อทำงานกับจำนวนเต็มมากโดยพลการ
ฟังก์ชันลอการิทึมธรรมชาติ
ส่งกลับตัวเลขสุ่ม N ระหว่างศูนย์ถึงหนึ่ง เช่น 0 ≤ N < 1
คืนค่าไซน์ของ expr ซึ่งมีหน่วยเป็นเรเดียน
คืนค่ารากที่สองของ expr
ใช้ expr เป็นเมล็ดพันธุ์ใหม่สำหรับตัวสร้างตัวเลขสุ่ม หากไม่ได้ระบุ expr ให้ใช้ช่วงเวลาของวัน ส่งคืนเมล็ดก่อนหน้าสำหรับตัวสร้างตัวเลขสุ่ม
Gawk มีฟังก์ชันสตริงในตัวดังต่อไปนี้ รายละเอียดอยู่ใน https://www.gnu.org/software/gawk/manual/html_node/String-Functions
ส่งกลับจำนวนองค์ประกอบในอาร์เรย์ต้นทาง s จัดเรียงเนื้อหาของ s โดยใช้กฎปกติของ gawk ในการเปรียบเทียบค่า และแทนที่ดัชนีของค่าที่จัดเรียง s ด้วยจำนวนเต็มตามลำดับที่ขึ้นต้นด้วย 1. หากระบุอาร์เรย์ปลายทางเพิ่มเติม d ให้ทำซ้ำ s เป็น d แล้วจึงเรียงลำดับ d ปล่อยให้ดัชนีของอาร์เรย์ต้นทาง s ไม่เปลี่ยนแปลง สตริงทางเลือก วิธี ควบคุมทิศทางและโหมดการเปรียบเทียบ ค่าที่ถูกต้องสำหรับ วิธี อธิบายไว้ใน https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions s และ d ได้รับอนุญาตให้เป็นอาร์เรย์เดียวกัน สิ่งนี้สมเหตุสมผลเมื่อระบุอาร์กิวเมนต์ที่สามด้วย
ส่งกลับจำนวนองค์ประกอบในอาร์เรย์ต้นทาง s ลักษณะการทำงานเหมือนกับของ asort() ยกเว้นว่าอาร์เรย์ ดัชนี ใช้สำหรับการเรียงลำดับ ไม่ใช่ค่าอาร์เรย์ เมื่อเสร็จแล้ว อาร์เรย์จะถูกสร้างดัชนีเป็นตัวเลข และค่าจะเป็นค่าของดัชนีดั้งเดิม ค่าดั้งเดิมจะหายไป ดังนั้นให้จัดเตรียมอาร์เรย์ที่สองหากคุณต้องการรักษาต้นฉบับไว้ วัตถุประสงค์ของสตริงทางเลือก อย่างไร เหมือนกับ asort() ที่นี่เช่นกัน s และ d ได้รับอนุญาตให้เป็นอาร์เรย์เดียวกัน สิ่งนี้สมเหตุสมผลเมื่อระบุอาร์กิวเมนต์ที่สามด้วย
ค้นหาสตริงเป้าหมาย t สำหรับการจับคู่ของนิพจน์ทั่วไป r ถ้า h เป็นสตริงที่ขึ้นต้นด้วย g หรือ G ให้แทนที่การจับคู่ทั้งหมดของ r ด้วย s . มิฉะนั้น h คือตัวเลขที่ระบุคู่ของ r ที่จะแทนที่ หากไม่ได้ระบุ t ให้ใช้ $0 แทน ภายในข้อความแทนที่ s ลำดับ \n โดยที่ n เป็นตัวเลขตั้งแต่ 1 ถึง 9 อาจ ใช้เพื่อระบุเฉพาะข้อความที่ตรงกับนิพจน์ย่อยที่อยู่ในวงเล็บ n ลำดับ \0 แสดงถึงข้อความที่ตรงกันทั้งหมด เช่นเดียวกับอักขระ & ซึ่งแตกต่างจาก sub() และ gsub() สตริงที่แก้ไขจะถูกส่งกลับเป็นผลลัพธ์ของฟังก์ชัน และสตริงเป้าหมายเดิมจะไม่เปลี่ยนแปลง .
สำหรับสตริงย่อยแต่ละรายการที่ตรงกับนิพจน์ทั่วไป r ในสตริง t ให้แทนที่สตริง s และส่งคืนจำนวนของการแทนที่ หากไม่ได้ระบุ t ให้ใช้ $0 & ในข้อความแทนที่จะถูกแทนที่ด้วยข้อความที่ตรงกันจริง ใช้ \& เพื่อรับตัวอักษร & (ต้องพิมพ์เป็น "\\&" โปรดดู https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details สำหรับการอภิปรายกฎสำหรับเครื่องหมายแอมเพอร์แซนด์และแบ็กสแลชในข้อความแทนที่ sub(), gsub() และ gensub()<.)
ส่งกลับดัชนีของสตริง t ในสตริง s หรือศูนย์หากไม่มี t (หมายความว่าดัชนีอักขระเริ่มต้นที่หนึ่ง)
ส่งกลับความยาวของสตริง s หรือความยาวของ $0 หากไม่ได้ระบุ s ด้วยอาร์กิวเมนต์อาร์เรย์ length() จะส่งกลับจำนวนองค์ประกอบในอาร์เรย์
ส่งกลับตำแหน่งใน s ที่เกิดนิพจน์ทั่วไป r หรือศูนย์หากไม่มี r และตั้งค่าเป็น RSTART และ ความยาว โปรดทราบว่าลำดับอาร์กิวเมนต์จะเหมือนกับตัวดำเนินการ ~: str ~ re
ดู https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions สำหรับคำอธิบายของอาร์เรย์ a จะถูกเติมเต็มหากมีให้
แยกสตริง s ออกเป็นอาร์เรย์ a และอาร์เรย์ตัวคั่น seps ในนิพจน์ทั่วไป r และส่งคืนค่า จำนวนฟิลด์ ค่าองค์ประกอบคือส่วนของ s ที่ตรงกับ r ค่าของ seps[i] เป็นตัวคั่น null ที่อาจเกิดขึ้นหลังจาก a[i] ค่าของ seps[0] เป็นตัวคั่นที่นำหน้าอาจเป็นค่าว่าง หากละเว้น r ระบบจะใช้ FPAT แทน อาร์เรย์ a และ seps จะถูกล้างก่อน การแยกจะทำงานเหมือนกับการแยกฟิลด์ด้วย FPAT
แยกสตริง s ออกเป็นอาร์เรย์ a และอาร์เรย์ตัวคั่น seps ในนิพจน์ทั่วไป r และส่งคืนค่า จำนวนฟิลด์ หากละเว้น r ระบบจะใช้ FS แทน อาร์เรย์ a และ seps จะถูกล้างก่อน seps[i] คือตัวคั่นฟิลด์ที่จับคู่โดย r ระหว่าง a[<i] และ a[i+1] การแยกจะทำงานเหมือนกับการแยกฟิลด์ .
พิมพ์ expr-list ตาม fmt และส่งคืนสตริงผลลัพธ์
ตรวจสอบ str และส่งกลับค่าตัวเลข ถ้า str ขึ้นต้นด้วย 0 นำหน้า ให้ถือว่าเป็นเลขฐานแปด ถ้า str ขึ้นต้นด้วย 0x หรือ 0X นำหน้า ให้ถือว่าเป็นเลขฐานสิบหก มิฉะนั้นให้ถือว่ามันเป็นเลขฐานสิบ
เช่นเดียวกับ gsub() แต่แทนที่เฉพาะสตริงย่อยแรกที่ตรงกันเท่านั้น ส่งกลับศูนย์หรือหนึ่ง
ส่งคืนสตริงย่อยอักขระ n มากที่สุดของ s โดยเริ่มต้นที่ i ถ้า n ถูกละไว้ ให้ใช้ s ที่เหลือ
ส่งคืนสำเนาของสตริง str โดยอักขระตัวพิมพ์ใหญ่ทั้งหมดใน str ที่แปลเป็นตัวพิมพ์เล็กที่สอดคล้องกัน อักขระที่ไม่ใช่ตัวอักษรจะไม่เปลี่ยนแปลง
ส่งคืนสำเนาของสตริง str โดยอักขระตัวพิมพ์เล็กทั้งหมดใน str ที่แปลเป็นตัวพิมพ์ใหญ่ที่สอดคล้องกัน อักขระที่ไม่ใช่ตัวอักษรจะไม่เปลี่ยนแปลง
Gawk รับรู้หลายไบต์ ซึ่งหมายความว่า index(), length(), substr() และ match() ทั้งหมดทำงานในเงื่อนไข ของอักขระ ไม่ใช่ไบต์
Gawk มีฟังก์ชันต่อไปนี้สำหรับการรับการประทับเวลาและการจัดรูปแบบ รายละเอียดอยู่ใน https://www.gnu.org/software/gawk/manual/html_node/Time-Functions
เปลี่ยน datespec เป็นการประทับเวลาในรูปแบบเดียวกับที่ส่งคืนโดย systime() และส่งคืนผลลัพธ์ ถ้า utc-flag มีอยู่และไม่เป็นศูนย์หรือไม่เป็นโมฆะ เวลาจะถือว่าอยู่ในเขตเวลา UTC มิฉะนั้น จะถือว่าเวลาอยู่ในเขตเวลาท้องถิ่น หาก datespec มีองค์ประกอบไม่เพียงพอหรือหากเวลาผลลัพธ์อยู่นอกช่วง mktime() จะส่งกลับ -1 ดู https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions สำหรับรายละเอียดของ datespec
จัดรูปแบบ การประทับเวลา ตามข้อกำหนดในรูปแบบ หาก utc-flag มีอยู่และไม่เป็นศูนย์หรือไม่เป็นโมฆะ ผลลัพธ์จะเป็น UTC มิฉะนั้น ผลลัพธ์จะเป็นตามเวลาท้องถิ่น การประทับเวลาควรอยู่ในรูปแบบเดียวกับที่ส่งคืนโดย systime() หากไม่มี การประทับเวลา ระบบจะใช้เวลาปัจจุบันของวัน หากไม่มี รูปแบบ ระบบจะใช้รูปแบบเริ่มต้นที่เทียบเท่ากับผลลัพธ์ของ วันที่(1) รูปแบบเริ่มต้นมีอยู่ใน PROCINFO["strftime"] ดูข้อมูลจำเพาะของฟังก์ชัน strftime() ใน ISO C สำหรับการแปลงรูปแบบที่รับประกันว่าจะใช้งานได้
ส่งกลับเวลาปัจจุบันของวันเป็นจำนวนวินาทีตั้งแต่ยุค (1970-01-01 00:00:00 UTC บนระบบ POSIX)
Gawk มีฟังก์ชันการจัดการบิตต่อไปนี้ ทำงานโดยแปลงค่าทศนิยมที่มีความแม่นยำสองเท่าเป็นจำนวนเต็ม uintmax_t ทำการดำเนินการ จากนั้นจึงแปลงผลลัพธ์กลับเป็นทศนิยม การส่งตัวถูกดำเนินการเชิงลบไปยังฟังก์ชันเหล่านี้ทำให้เกิดข้อผิดพลาดร้ายแรง
ฟังก์ชั่นคือ:
ส่งกลับค่าบิตและของค่าที่ระบุในรายการอาร์กิวเมนต์ ต้องมีอย่างน้อยสอง
คืนส่วนเติมเต็มระดับบิตของ val
ส่งกลับค่าของ val เลื่อนไปทางซ้ายทีละ count บิต
ส่งกลับค่าบิตหรือของค่าที่ระบุในรายการอาร์กิวเมนต์ ต้องมีอย่างน้อยสอง
ส่งกลับค่าของ val เลื่อนไปทางขวาทีละ count บิต
ส่งกลับ XOR ระดับบิตของค่าที่ระบุในรายการอาร์กิวเมนต์ ต้องมีอย่างน้อยสอง
ฟังก์ชันต่อไปนี้ให้ข้อมูลประเภทที่เกี่ยวข้องกับอาร์กิวเมนต์
คืนค่าจริงถ้า x เป็นอาร์เรย์ มิฉะนั้นกลับเป็นเท็จ
ส่งกลับสตริงที่ระบุประเภทของ x สตริงจะเป็นหนึ่งใน "array", "number", "regexp", "string", "strnum", "ไม่ได้กำหนด" หรือ "ไม่ได้กำหนด"
ฟังก์ชันต่อไปนี้อาจใช้จากภายในโปรแกรม AWK ของคุณสำหรับการแปลสตริงขณะรันไทม์ สำหรับรายละเอียดทั้งหมด โปรดดูที่ https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions
ระบุไดเร็กทอรีที่ gawk ค้นหาไฟล์ .gmo ในกรณีที่ไม่สามารถวางไฟล์เหล่านี้ในตำแหน่ง ``standard'' ส่งคืนไดเร็กทอรีที่ โดเมน ``ถูกผูกไว้''
โดเมน เริ่มต้นคือค่าของ TEXTDOMAIN ถ้า ไดเร็กทอรี เป็นสตริงว่าง ("") ดังนั้น bindtextdomain() จะส่งคืนการรวมปัจจุบันสำหรับ โดเมน ที่กำหนด .
ส่งกลับคำแปลของ สตริง ในโดเมนข้อความ โดเมน สำหรับหมวดหมู่สถานที่ หมวดหมู่ ค่าเริ่มต้นสำหรับ โดเมน คือค่าปัจจุบันของ TEXTDOMAIN ค่าเริ่มต้นสำหรับ หมวดหมู่ คือ "LC_MESSAGES"
ส่งคืนรูปพหูพจน์ที่ใช้สำหรับ number ของการแปล string1 และ string2 ในโดเมนข้อความ domain สำหรับหมวดหมู่สถานที่ <หมวดหมู่. ค่าเริ่มต้นสำหรับ โดเมน คือค่าปัจจุบันของ TEXTDOMAIN ค่าเริ่มต้นสำหรับ หมวดหมู่ คือ "LC_MESSAGES"
คุณสามารถสร้างค่าประเภทบูลีนพิเศษได้ ดูคู่มือสำหรับวิธีการทำงานและเหตุใดจึงมีอยู่
ตามค่าบูลีนของ นิพจน์ จะส่งกลับค่าจริงหรือค่าเท็จ ค่าจริงมีค่าเป็นตัวเลข 1 ค่าเท็จมีค่าตัวเลขเป็นศูนย์
ฟังก์ชันใน AWK ถูกกำหนดดังนี้:
ฟังก์ชัน ชื่อ(รายการพารามิเตอร์) { คำสั่ง }
ฟังก์ชันดำเนินการเมื่อถูกเรียกจากภายในนิพจน์ในรูปแบบหรือการกระทำ พารามิเตอร์จริงที่ระบุในการเรียกใช้ฟังก์ชันจะใช้เพื่อสร้างตัวอย่างพารามิเตอร์อย่างเป็นทางการที่ประกาศในฟังก์ชัน อาร์เรย์จะถูกส่งผ่านโดยการอ้างอิง ตัวแปรอื่นๆ จะถูกส่งผ่านตามค่า
ตัวแปรโลคัลถูกประกาศเป็นพารามิเตอร์พิเศษในรายการพารามิเตอร์ ข้อตกลงคือการแยกตัวแปรโลคัลออกจากพารามิเตอร์จริงด้วยช่องว่างเพิ่มเติมในรายการพารามิเตอร์ ตัวอย่างเช่น:
function f(p, q, a, b) # a and b are local { . . . } /abc/ { . . . ; f(1, 2) ; . . . }
วงเล็บด้านซ้ายในการเรียกใช้ฟังก์ชันจำเป็นต้องตามหลังชื่อฟังก์ชันทันที โดยไม่มีช่องว่างใดๆ ข้อจำกัดนี้ใช้ไม่ได้กับฟังก์ชันในตัวที่ระบุไว้ด้านบน
ฟังก์ชันอาจเรียกหากันและอาจเรียกซ้ำได้ พารามิเตอร์ของฟังก์ชันที่ใช้เป็นตัวแปรโลคัลจะถูกเตรียมใช้งานเป็นสตริง null และเลขศูนย์เมื่อเรียกใช้ฟังก์ชัน
ใช้ return expr เพื่อคืนค่าจากฟังก์ชัน ค่าที่ส่งคืนจะไม่ถูกกำหนดหากไม่มีค่าใด ๆ ไว้ หรือหากฟังก์ชันส่งคืนโดย "ตกลงไป" ที่จุดสิ้นสุด
ฟังก์ชันอาจถูกเรียกใช้โดยอ้อม ในการทำเช่นนี้ ให้กำหนดชื่อของฟังก์ชันที่จะเรียกเป็นสตริงให้กับตัวแปร จากนั้นใช้ตัวแปรเสมือนว่าเป็นชื่อของฟังก์ชัน นำหน้าด้วยเครื่องหมาย @ เช่น:
function myfunc() { print "myfunc called" . . . } { . . . the_func = "myfunc" @the_func() # call through the_func to myfunc . . . }
หากระบุ - -lint ไว้ gawk จะเตือนเกี่ยวกับการเรียกไปยังฟังก์ชันที่ไม่ได้กำหนดในเวลาแยกวิเคราะห์ แทนที่จะเรียกในเวลาทำงาน การเรียกใช้ฟังก์ชันที่ไม่ได้กำหนดขณะรันไทม์ถือเป็นข้อผิดพลาดร้ายแรง
คุณสามารถเพิ่มฟังก์ชันใหม่ที่เขียนด้วยภาษา C หรือ C++ ให้กับตัวแปล gawk ที่กำลังทำงานอยู่แบบไดนามิกด้วยคำสั่ง @load รายละเอียดทั้งหมดอยู่นอกเหนือขอบเขตของหน้าคู่มือนี้ ดู https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions
เครื่องมือสร้างโปรไฟล์ gawk ยอมรับสองสัญญาณ SIGUSR1 ทำให้มันดัมพ์โปรไฟล์และสแตกการเรียกใช้ฟังก์ชันไปยังไฟล์โปรไฟล์ ซึ่งก็คือ awkprof.out หรือไฟล์ใดก็ตามที่มีชื่อเป็น - -profile ตัวเลือก แล้ววิ่งต่อไป SIGHUP ทำให้ gawk ทิ้งโปรไฟล์และกลุ่มการเรียกฟังก์ชันแล้วออก
ค่าคงที่ของสตริงคือลำดับของอักขระที่อยู่ในอัญประกาศคู่ ในสภาพแวดล้อมที่ไม่ใช่ภาษาอังกฤษ คุณสามารถทำเครื่องหมายสตริงในโปรแกรม AWK ว่าต้องการให้แปลเป็นภาษาท้องถิ่นได้ สตริงดังกล่าวถูกทำเครื่องหมายในโปรแกรม AWK โดยมีเครื่องหมายขีดล่าง (“_ ”) นำหน้า ตัวอย่างเช่น,
gawk 'BEGIN { print "hello, world" }'พิมพ์ว่า สวัสดีชาวโลก เสมอ แต่,
gawk 'BEGIN { print _"hello, world" }'อาจพิมพ์ว่า bonjour, monde ในฝรั่งเศส ดู https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization สำหรับขั้นตอนที่เกี่ยวข้องในการผลิตและใช้งานโปรแกรม AWK ที่แปลเป็นภาษาท้องถิ่นได้
Gawk มีส่วนขยายจำนวนมากเกินไปสำหรับ POSIX awk มีการอธิบายไว้ใน https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html ส่วนขยายทั้งหมดสามารถปิดใช้งานได้โดยเรียกใช้ gawk ด้วยตัวเลือก - -traditional หรือ - -posix
ตัวแปรสภาพแวดล้อม AWKPATH สามารถใช้เพื่อจัดเตรียมรายการไดเร็กทอรีที่ gawk ค้นหาเมื่อค้นหาไฟล์ที่มีชื่อผ่าน -f, - -file, -i และ - -include และคำสั่ง @include หากการค้นหาเริ่มต้นล้มเหลว เส้นทางจะถูกค้นหาอีกครั้งหลังจากเพิ่ม .awk ต่อท้ายชื่อไฟล์
ตัวแปรสภาพแวดล้อม AWKLIBPATH สามารถใช้เพื่อจัดเตรียมรายการไดเร็กทอรีที่ gawk ค้นหาเมื่อค้นหาไฟล์ที่มีชื่อผ่าน -l และ - -โหลด ตัวเลือก
ตัวแปรสภาพแวดล้อม GAWK_PERSIST_FILE ถ้ามี จะระบุไฟล์ที่จะใช้เป็นที่เก็บข้อมูลสำรองสำหรับหน่วยความจำถาวร คุณลักษณะนี้เป็นคุณลักษณะทดลอง ดู GAWK: การเขียนโปรแกรม AWK ที่มีประสิทธิภาพ สำหรับรายละเอียด
ตัวแปรสภาพแวดล้อม GAWK_READ_TIMEOUT สามารถใช้เพื่อระบุการหมดเวลาเป็นมิลลิวินาทีสำหรับการอ่านอินพุตจากเทอร์มินัล ไปป์ หรือการสื่อสารสองทางรวมถึงซ็อกเก็ต
สำหรับการเชื่อมต่อกับโฮสต์ระยะไกลผ่านซ็อกเก็ต GAWK_SOCK_RETRIES จะควบคุมจำนวนครั้งในการลองใหม่ และ GAWK_MSEC_SLEEP ช่วงเวลาระหว่างการลองใหม่ ช่วงเวลาเป็นมิลลิวินาที ในระบบที่ไม่สนับสนุน usleep(3) ค่าจะถูกปัดขึ้นเป็นจำนวนวินาที
หากมี POSIXLY_CORRECT อยู่ในสภาพแวดล้อม gawk จะทำงานเหมือนกับว่า - -posix ถูกระบุในบรรทัดคำสั่ง หากมีการระบุ - -lint gawk จะแสดงข้อความเตือนถึงผลกระทบนี้
ตั้งค่า GAWK_NO_MPFR_WARN ในสภาพแวดล้อมเพื่อปิดเสียงคำเตือนเกี่ยวกับโหมด MPFR ที่เลิกใช้งาน
ถ้าคำสั่ง exit ใช้กับค่า ดังนั้น gawk จะออกด้วยค่าตัวเลขที่กำหนด
มิฉะนั้น หากไม่มีปัญหาระหว่างการดำเนินการ gawk จะออกด้วยค่าคงที่ C EXIT_SUCCESS โดยปกติจะเป็นศูนย์
ถ้าเกิดข้อผิดพลาด gawk จะออกด้วยค่าคงที่ C EXIT_FAILURE โดยปกติจะเป็นหนึ่งเดียว
หาก gawk ออกเนื่องจากข้อผิดพลาดร้ายแรง สถานะการออกคือ 2 ในระบบที่ไม่ใช่ POSIX ค่านี้อาจจับคู่กับ EXIT_FAILURE
หน้าเอกสารนี้ gawk เวอร์ชัน 5.2
UNIX awk เวอร์ชันดั้งเดิมได้รับการออกแบบและใช้งานโดย Alfred Aho, Peter Weinberger และ Brian Kernighan จาก Bell Laboratories Brian Kernighan ยังคงรักษาและปรับปรุงต่อไป
Paul Rubin และ Jay Fenlason จาก Free Software Foundation เขียน gawk เพื่อให้เข้ากันได้กับ awk รุ่นดั้งเดิมที่เผยแพร่ใน Seventh Edition UNIX John Woods มีส่วนร่วมในการแก้ไขข้อบกพร่องจำนวนหนึ่ง David Trueman พร้อมด้วยผลงานจาก Arnold Robbins ทำให้ gawk เข้ากันได้กับ UNIX awk เวอร์ชันใหม่ Arnold Robbins เป็นผู้ดูแลคนปัจจุบัน
ดู GAWK: การเขียนโปรแกรม AWK ที่มีประสิทธิภาพ สำหรับรายชื่อผู้ร่วมให้ข้อมูลทั้งหมดของ gawk และเอกสารประกอบ
ดูไฟล์ README ในการกระจาย gawk สำหรับข้อมูลล่าสุดเกี่ยวกับผู้ดูแลและพอร์ตที่รองรับในปัจจุบัน
หากคุณพบข้อบกพร่องใน gawk โปรดใช้โปรแกรม gawkbug(1) เพื่อรายงาน
คำแนะนำทั้งหมดสำหรับการรายงานจุดบกพร่องมีอยู่ใน https://www.gnu.org/software/gawk/manual/html_node/Bugs.html โปรด อ่านอย่างละเอียดและปฏิบัติตามคำแนะนำที่ให้ไว้ที่นั่น การดำเนินการนี้จะทำให้การรายงานข้อบกพร่องและการแก้ปัญหาง่ายขึ้นมากสำหรับทุกคนที่เกี่ยวข้อง จริงหรือ.
ไม่จำเป็นต้องใช้ตัวเลือก -F เนื่องจากคุณสมบัติการกำหนดตัวแปรบรรทัดคำสั่ง มันยังคงอยู่สำหรับความเข้ากันได้แบบย้อนหลังเท่านั้น
หน้าคู่มือนี้ยาวเกินไป gawk มีคุณสมบัติมากเกินไป
egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3).
The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.
GAWK: Effective AWK Programming, Edition 5.2, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual.
The GNU gettext documentation, available online at https://www.gnu.org/software/gettext.
Print and sort the login names of all users:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Count lines in a file:
{ nlines++ }
END { print nlines }
Precede each line by its number in the file:
{ print FNR, $0 }
Concatenate and line number (a variation on a theme):
{ print NR, $0 }
Run an external command for particular lines of data:
tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'Brian Kernighan ให้ความช่วยเหลืออันมีค่าระหว่างการทดสอบและการแก้ไขจุดบกพร่อง เราขอบคุณเขา
สงวนลิขสิทธิ์ 2556 2557 2558 2559 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
อนุญาตให้ทำและแจกจ่ายสำเนาแบบคำต่อคำของหน้าคู่มือนี้ได้ โดยที่ประกาศเกี่ยวกับลิขสิทธิ์และประกาศการอนุญาตนี้จะถูกเก็บรักษาไว้ในสำเนาทั้งหมด
อนุญาตให้ประมวลผลไฟล์นี้ผ่าน troff และพิมพ์ผลลัพธ์ หากเอกสารที่พิมพ์มีประกาศการอนุญาตการคัดลอกเหมือนกับเอกสารนี้ ยกเว้นการลบย่อหน้านี้ (ย่อหน้านี้ไม่เกี่ยวข้องกับหน้าคู่มือที่พิมพ์)
อนุญาตให้คัดลอกและแจกจ่ายเวอร์ชันแก้ไขของหน้าคู่มือนี้ภายใต้เงื่อนไขสำหรับการคัดลอกแบบคำต่อคำ โดยมีเงื่อนไขว่าผลงานที่ได้รับทั้งหมดจะถูกแจกจ่ายภายใต้เงื่อนไขของประกาศการอนุญาตที่เหมือนกันกับงานนี้
อนุญาตให้คัดลอกและแจกจ่ายคำแปลของหน้าคู่มือนี้เป็นภาษาอื่นภายใต้เงื่อนไขข้างต้นสำหรับเวอร์ชันที่แก้ไข เว้นแต่ว่าประกาศอนุญาตนี้อาจระบุไว้ในการแปลที่ได้รับอนุมัติจากมูลนิธิ