Skip to main content

Gawk - คำสั่ง Linux - คำสั่ง Unix

พื้นฐาน Linux #1 - การใช้คำสั่งเบื้องต้น (มิถุนายน 2026)

พื้นฐาน Linux #1 - การใช้คำสั่งเบื้องต้น (มิถุนายน 2026)
Anonim

ชื่อ

Gawk - รูปแบบการสแกนและการประมวลผลภาษา

สรุป

เพ่งพิศ ตัวเลือกสไตล์ POSIX หรือ GNU -f โปรแกรมไฟล์ -- ไฟล์ …เพ่งพิศ ตัวเลือกสไตล์ POSIX หรือ GNU -- โปรแกรมข้อความ ไฟล์ …

pgawk ตัวเลือกสไตล์ POSIX หรือ GNU -f โปรแกรมไฟล์ -- ไฟล์ …pgawk ตัวเลือกสไตล์ POSIX หรือ GNU -- โปรแกรมข้อความ ไฟล์ …

ลักษณะ

เพ่งพิศ คือการใช้ภาษาโครงการ AWK ของ GNU Project สอดคล้องกับคำนิยามของภาษาในภาษาสั่งการ POSIX 1003.2 และ Standard Utilities Standard รุ่นนี้จะขึ้นอยู่กับรายละเอียดใน ภาษาโปรแกรม AWK โดย Aho Kernighan และ Weinberger โดยมีคุณสมบัติเพิ่มเติมที่พบได้ใน UNIX เวอร์ชัน System V Release 4 awk . เพ่งพิศ นอกจากนี้ยังมี Bell Laboratories รุ่นล่าสุดอีกด้วย awk ส่วนขยายและส่วนขยายเฉพาะของ GNU

Pgawk เป็นรูปแบบโปรไฟล์ของ เพ่งพิศ . มันเหมือนกันในทุกวิถีทาง เพ่งพิศ ยกเว้นว่าโปรแกรมทำงานได้ช้ากว่าและจะสร้างโปรไฟล์การทำงานในไฟล์โดยอัตโนมัติ awkprof.out เมื่อทำเสร็จแล้ว. ดู --ข้อมูลส่วนตัว ตัวเลือกด้านล่าง

บรรทัดคำสั่งประกอบด้วยตัวเลือก เพ่งพิศ ตัวเองข้อความโปรแกรม AWK (ถ้าไม่ได้ให้มาผ่านทาง -f หรือ --ไฟล์ ตัวเลือก) และค่าที่จะมีอยู่ใน argc และ ARGV ตัวแปร AWK ที่กำหนดไว้ล่วงหน้า

รูปแบบตัวเลือก

เพ่งพิศ อาจเป็นตัวเลือกจดหมายแบบ POSIX แบบดั้งเดิมหรือตัวเลือกแบบยาวของ GNU ตัวเลือก POSIX เริ่มต้นด้วยคำเดียว "-" "ในขณะที่ตัวเลือกที่ยาวเริ่มต้นด้วย` `- '' มีตัวเลือกยาวสำหรับคุณลักษณะเฉพาะของ GNU และสำหรับคุณลักษณะที่กำหนดโดย POSIX

ตามมาตรฐาน POSIX, เพ่งพิศ ตัวเลือกที่เฉพาะเจาะจงจะถูกส่งผ่านอาร์กิวเมนต์ไปยัง -W ตัวเลือก หลายอย่าง -W อาจมีการจัดให้แต่ละ -W มีตัวเลือกแบบยาวที่สอดคล้องกันดังรายละเอียดด้านล่าง อาร์กิวเมนต์ไปยังตัวเลือกที่ยาวจะเข้าร่วมกับตัวเลือกโดย a = เครื่องหมายโดยไม่มีช่องว่างแทรกแซงหรืออาจมีให้ในอาร์กิวเมนต์บรรทัดคำสั่งถัดไป ตัวเลือกที่ยาวอาจใช้คำย่อได้ตราบใดที่คำย่อยังคงเป็นเอกลักษณ์

ตัวเลือก

เพ่งพิศ ยอมรับตัวเลือกตอไปนี้ตามลําดับตัวอักษร

-F FS

--field-คั่น FS ใช้ FS สำหรับตัวคั่นฟิลด์อินพุต (ค่าของ FS ตัวแปรที่กำหนดไว้ล่วงหน้า)

-v var = Val

--กำหนด var = Val กำหนดค่า Val กับตัวแปร var ก่อนเริ่มดำเนินการโปรแกรม ค่าตัวแปรดังกล่าวสามารถใช้ได้กับ เริ่ม บล็อกของโปรแกรม AWK

-f โปรแกรมไฟล์

--ไฟล์ โปรแกรมไฟล์ อ่านแหล่งโปรแกรม AWK จากไฟล์ โปรแกรมไฟล์ แทนจากอาร์กิวเมนต์บรรทัดคำสั่งแรก หลายอย่าง -f (หรือ --ไฟล์) อาจใช้

-MF NNN

-นาย NNN ตั้งค่าหน่วยความจำต่างๆให้มีค่า NNN . flag ตั้งค่าจำนวนฟิลด์สูงสุดและ R flag ตั้งค่าขนาดบันทึกสูงสุด ทั้งสองธงและ -m ตัวเลือกนี้มาจาก Bell Laboratories รุ่นทดลองของ UNIX awk . พวกเขาไม่สนใจ เพ่งพิศ , ตั้งแต่ เพ่งพิศ ไม่มีขีด จำกัด ที่กำหนดไว้ล่วงหน้า

-W compat

- แบบดั้งเดิม

--compat

--traditional วิ่งเข้า ความเข้ากันได้ โหมด. ในโหมดความเข้ากันได้, เพ่งพิศ จะทำงานเหมือนกันกับ UNIX awk ; ไม่มีส่วนขยายเฉพาะของ GNU ที่รู้จัก การใช้ --traditional เป็นที่ต้องการมากกว่ารูปแบบอื่น ๆ ของตัวเลือกนี้ ดู GNU EXTENSIONSด้านล่างสำหรับข้อมูลเพิ่มเติม

-W copyleft

- ลิขสิทธิ์

--copyleft

--ลิขสิทธิ์ พิมพ์ข้อความข้อมูลลิขสิทธิ์ GNU ในเวอร์ชันมาตรฐานที่ออกมาตรฐานและออกจากโปรแกรมสำเร็จ

-W ตัวแปรการถ่ายโอนข้อมูล= ไฟล์

--dump ตัวแปร= ไฟล์ พิมพ์รายการที่เรียงลำดับของตัวแปรทั่วโลกประเภทและค่าสุดท้ายของพวกเขาไปที่ ไฟล์ . ถ้าไม่ ไฟล์ มีให้, เพ่งพิศ ใช้ไฟล์ชื่อ awkvars.out ในไดเร็กทอรีปัจจุบัน

การมีรายการตัวแปรทั่วโลกทั้งหมดเป็นวิธีที่ดีในการค้นหาข้อผิดพลาดทางภาษาในโปรแกรมของคุณ นอกจากนี้คุณยังใช้ตัวเลือกนี้หากคุณมีโปรแกรมขนาดใหญ่ที่มีฟังก์ชันมากมายและต้องการตรวจสอบว่าฟังก์ชันของคุณไม่ได้ใช้ตัวแปรส่วนกลางที่คุณหมายถึงแบบเฉพาะเจาะจง (นี่เป็นข้อผิดพลาดที่ง่ายโดยเฉพาะอย่างยิ่งกับชื่อตัวแปรง่ายๆเช่น ผม, J, และอื่น ๆ )

-W ช่วย

- การใช้งาน W

--ช่วยด้วย

--usage พิมพ์สรุปสั้น ๆ ของตัวเลือกที่มีอยู่ในเอาต์พุตมาตรฐาน (ต่อ มาตรฐานการเข้ารหัสของ GNU ตัวเลือกเหล่านี้ทำให้การออกจากระบบสำเร็จทันที)

-W lint= ร้ายแรง

--ผ้าสำลี= ร้ายแรง ให้คำเตือนเกี่ยวกับโครงสร้างที่ไม่น่าไว้วางใจหรือไม่สามารถพกพาไปยังการใช้งานอื่น ๆ ของ. ด้วยอาร์กิวเมนต์ตัวเลือกของ ร้ายแรง, คำเตือนผ้าสำลีกลายเป็นข้อผิดพลาดร้ายแรง นี้อาจจะรุนแรง แต่การใช้งานอย่างแน่นอนจะสนับสนุนการพัฒนาโปรแกรมทำความสะอาด AWK

-W lint-old

--lint เก่า ให้คำเตือนเกี่ยวกับโครงสร้างที่ไม่ได้พกพาไปยัง Unix เวอร์ชันต้นแบบ awk .

-W gen-po

--gen-PO สแกนและแยกโปรแกรม AWK และสร้าง GNU .po ไฟล์รูปแบบบนเอาต์พุตมาตรฐานพร้อมรายการสำหรับสายอักขระที่สามารถปรับได้ทั้งหมดในโปรแกรม โปรแกรมตัวเองไม่ทำงาน ดู GNU gettext สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ .po ไฟล์

- ไม่ใช่ข้อมูลทศนิยม

--non ทศนิยมข้อมูล รับรู้ค่าฐานแปดและเลขฐานสิบหกในข้อมูลป้อนข้อมูล ใช้ตัวเลือกนี้ด้วยความระมัดระวังเป็นอย่างยิ่ง!

-W posix

--posix นี้จะเปิดขึ้น ความเข้ากันได้ โหมดที่มีข้อ จำกัด เพิ่มเติมต่อไปนี้:

*

x ลำดับหนีจะไม่รู้จัก

*

เฉพาะพื้นที่และแท็บทำหน้าที่เป็นตัวคั่นฟิลด์เมื่อ FS ถูกกำหนดให้เป็นช่องว่างเพียงบรรทัดใหม่ไม่ได้

*

คุณไม่สามารถดำเนินการต่อได้ ? และ :.

*

คำพ้องความหมาย func สำหรับคำหลัก ฟังก์ชัน ไม่เป็นที่รู้จัก

*

ผู้ประกอบการ ** และ **= ไม่สามารถใช้แทนที่ได้ ^ และ ^=.

*

fflush () ไม่สามารถใช้งานได้

โปรไฟล์ -W= prof_file

--ข้อมูลส่วนตัว= prof_file ส่งข้อมูลโปรไฟล์ไปที่ prof_file . ค่าดีฟอลต์คือ awkprof.out. เมื่อทำงานด้วย เพ่งพิศ โปรไฟล์นี้เป็นเพียงโปรแกรมพิมพ์ "pretty print" ของโปรแกรมเท่านั้น เมื่อทำงานด้วย pgawk รายละเอียดมีการนับการดำเนินการของแต่ละคำสั่งในโปรแกรมในขอบด้านซ้ายและจำนวนการเรียกฟังก์ชันสำหรับแต่ละฟังก์ชันที่ผู้ใช้กำหนด

-W ช่วงเวลาใหม่

--re-ช่วงเวลา เปิดการใช้งาน นิพจน์ช่วงเวลา ในการจับคู่นิพจน์ปกติ (ดู นิพจน์ทั่วไปด้านล่าง) การแสดงออกของช่วงเวลาไม่สามารถใช้งานได้ในภาษา AWK มาตรฐาน POSIX เพิ่มพวกเขาเพื่อให้ awk และ egrep สอดคล้องกับแต่ละอื่น ๆ อย่างไรก็ตามการใช้งานของพวกเขามีแนวโน้มที่จะทำลายโปรแกรม AWK เก่า ๆ เพ่งพิศ เพียง แต่ให้พวกเขาหากพวกเขามีการร้องขอด้วยตัวเลือกนี้หรือเมื่อ --posix ถูกระบุไว้

-W source โปรแกรมข้อความ

--source โปรแกรมข้อความ ใช้ โปรแกรมข้อความ เป็นรหัสแหล่งโปรแกรม AWK ตัวเลือกนี้ช่วยให้ง่ายต่อการผสมผสานของฟังก์ชันห้องสมุด (ใช้ผ่านทาง -f และ --ไฟล์ ตัวเลือก) กับรหัสแหล่งที่มาในบรรทัดคำสั่ง มีจุดประสงค์หลักสำหรับโปรแกรม AWK ขนาดกลางถึงใหญ่ที่ใช้ในสคริปต์เชลล์

รุ่น -W

--version พิมพ์ข้อมูลรุ่นสำหรับสำเนาเฉพาะนี้ เพ่งพิศ บนเอาต์พุตมาตรฐาน ซึ่งจะเป็นประโยชน์สำหรับการทราบว่าสำเนาปัจจุบันของ เพ่งพิศ ในระบบของคุณเป็นข้อมูลล่าสุดเกี่ยวกับสิ่งที่ Free Software Foundation แจกจ่าย นอกจากนี้ยังมีประโยชน์เมื่อรายงานข้อบกพร่อง (ต่อ มาตรฐานการเข้ารหัสของ GNU ตัวเลือกเหล่านี้ทำให้การออกจากระบบสำเร็จทันที)

-- สัญญาณสิ้นสุดของตัวเลือก นี้จะเป็นประโยชน์เพื่อให้อาร์กิวเมนต์ต่อไปโปรแกรม AWK ตัวเองเพื่อเริ่มต้นด้วย `` - '' นี่คือส่วนใหญ่สำหรับความสอดคล้องกับอาร์กิวเมนต์การแยกวิเคราะห์การประชุมที่ใช้โดยโปรแกรม POSIX อื่น ๆ ส่วนใหญ่

ในโหมดความเข้ากันได้ตัวเลือกอื่น ๆ จะถูกตั้งค่าสถานะว่าไม่ถูกต้อง แต่จะถูกละเว้นไป ในการดำเนินการตามปกติตราบเท่าที่ข้อความของโปรแกรมได้รับมาแล้วตัวเลือกที่ไม่รู้จักจะถูกส่งผ่านไปยังโปรแกรม AWK ใน ARGV อาร์เรย์สำหรับการประมวลผล นี้มีประโยชน์อย่างยิ่งสำหรับการรันโปรแกรม AWK ผ่านกลไกการแปล `` #! '' ปฏิบัติการ

การดำเนินการโครงการ AWK

โปรแกรม AWK ประกอบด้วยชุดคำสั่งการออกแบบและคำจำกัดความของฟังก์ชั่นที่เลือก

แบบแผน { คำสั่งการดำเนินการ }ฟังก์ชัน ชื่อ ( รายการพารามิเตอร์ ) { งบ }

เพ่งพิศ แรกอ่านแหล่งโปรแกรมจาก โปรแกรมไฟล์ (s) ถ้าระบุจากอาร์กิวเมนต์ไป --source, หรือจากอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกแรกบนบรรทัดคำสั่ง -f และ --source อาจใช้หลายครั้งในบรรทัดคำสั่ง เพ่งพิศ อ่านข้อความของโปรแกรมเหมือนกับว่าทั้งหมด โปรแกรมไฟล์ s และบรรทัดคำสั่งแหล่งที่มาได้ถูก concatenated กัน วิธีนี้มีประโยชน์สำหรับการสร้างไลบรารีของฟังก์ชัน AWK โดยไม่ต้องใส่ไว้ในโปรแกรม AWK ใหม่แต่ละโปรแกรมที่ใช้งาน นอกจากนี้ยังมีความสามารถในการผสมฟังก์ชั่นห้องสมุดกับโปรแกรมบรรทัดคำสั่ง

ตัวแปรสภาพแวดล้อม AWKPATH ระบุพา ธ การค้นหาที่จะใช้เมื่อค้นหาไฟล์ต้นฉบับที่มีชื่อว่า -f ตัวเลือก หากไม่มีตัวแปรนี้เส้นทางเริ่มต้นคือ":. / usr / local / share / awk". (ไดเรกทอรีจริงอาจแตกต่างกันขึ้นอยู่กับว่า เพ่งพิศ ถูกสร้างและติดตั้ง) ถ้าชื่อไฟล์ที่กำหนดให้กับ -f มีอักขระ `` / '' ไม่มีการค้นหาเส้นทาง

เพ่งพิศ รันโปรแกรม AWK ตามลำดับต่อไปนี้ ขั้นแรกให้กำหนดตัวแปรทั้งหมดที่ระบุผ่านทาง -v จะดำเนินการ ต่อไป, เพ่งพิศ คอมไพล์โปรแกรมลงในฟอร์มภายใน จากนั้น เพ่งพิศ ดำเนินการรหัสใน เริ่ม บล็อก (s) (ถ้ามี) และดำเนินการอ่านแต่ละไฟล์ที่มีชื่อใน ARGV แถว หากไม่มีไฟล์ชื่อในบรรทัดคำสั่ง เพ่งพิศ อ่านอินพุตมาตรฐาน

ถ้าชื่อไฟล์ในบรรทัดคำสั่งมีแบบฟอร์ม var = Val มันถือว่าเป็นตัวแปรมอบหมาย ตัวแปร var จะได้รับค่า Val . (เกิดขึ้นหลังจากที่ใด ๆ เริ่ม มีการเรียกใช้งานบล็อก) การกำหนดตัวแปรบรรทัดคำสั่งมีประโยชน์มากสำหรับการกำหนดค่าตัวแปร AWK แบบไดนามิกเพื่อควบคุมวิธีการป้อนข้อมูลที่ถูกแบ่งออกเป็นฟิลด์และระเบียน นอกจากนี้ยังมีประโยชน์ในการควบคุมสถานะถ้าต้องมีการส่งผ่านข้อมูลมากกว่าหนึ่งไฟล์

ถ้าค่าขององค์ประกอบเฉพาะของ ARGV มันว่างเปล่า (''), เพ่งพิศ ข้ามไป

สำหรับแต่ละระเบียนในอินพุท, เพ่งพิศ ทดสอบเพื่อดูว่ามันตรงกับใด ๆ แบบแผน ในโปรแกรม AWK สำหรับแต่ละรูปแบบที่ตรงกับระเบียนข้อมูลที่เกี่ยวข้อง การกระทำ จะถูกประมวลผล รูปแบบจะได้รับการทดสอบตามลำดับที่ปรากฏในโปรแกรม

สุดท้ายหลังจากใส่ข้อมูลทั้งหมดจะหมด, เพ่งพิศ ดำเนินการรหัสใน END บล็อก (s) (ถ้ามี)

ตัวแปรเร็กคอร์ดและฟิลด์

ตัวแปร AWK เป็นแบบไดนามิก เมื่อมีการใช้งานครั้งแรก ค่าของพวกเขาเป็นตัวเลขทศนิยมหรือสตริงหรือทั้งสองอย่างขึ้นอยู่กับว่าใช้งานอย่างไร AWK มีอาร์เรย์แบบหนึ่งมิติ อาร์เรย์ที่มีหลายมิติอาจได้รับการจำลอง ตัวแปรที่กำหนดไว้ล่วงหน้าหลายตัวถูกตั้งค่าให้เป็นโปรแกรมทำงาน เหล่านี้จะอธิบายตามความจำเป็นและสรุปไว้ด้านล่าง

ประวัติ

โดยปกติเรกคอร์ดจะถูกคั่นด้วยอักขระใหม่ คุณสามารถควบคุมวิธีที่ระเบียนถูกคั่นด้วยการกำหนดค่าให้กับตัวแปรภายใน อาร์เอส. ถ้า อาร์เอส เป็นอักขระเดี่ยวตัวอักษรที่แยกระเบียน มิฉะนั้น, อาร์เอส เป็นนิพจน์ทั่วไป ข้อความในอินพุตที่ตรงกับนิพจน์ปกตินี้จะแยกระเบียนออก อย่างไรก็ตามในโหมดความเข้ากันได้เฉพาะอักขระตัวแรกของค่าสายอักขระที่ใช้สำหรับการแบ่งระเบียนเท่านั้น ถ้า อาร์เอส ถูกตั้งค่าเป็นสตริงที่ว่างแล้วระเบียนจะถูกคั่นด้วยบรรทัดว่าง เมื่อ อาร์เอส ถูกตั้งค่าเป็นสตริง null อักขระ newline จะทำหน้าที่เป็นตัวคั่นฟิลด์เสมอนอกเหนือจากค่าใดก็ตาม FS อาจจะมี.

ทุ่ง

ในฐานะที่เป็นบันทึกการป้อนข้อมูลแต่ละครั้งจะถูกอ่าน, เพ่งพิศ แยกระเบียนเข้า สาขา , โดยใช้ค่าของ FS ตัวแปรเป็นตัวคั่นฟิลด์ ถ้า FS เป็นอักขระเดี่ยวเขตข้อมูลจะถูกคั่นด้วยอักขระนั้น ถ้า FS เป็นสตริง null จากนั้นอักขระแต่ละตัวจะกลายเป็นฟิลด์ที่แยกต่างหาก มิฉะนั้น, FS คาดว่าจะเป็นนิพจน์ปกติเต็มรูปแบบ ในกรณีพิเศษนั่นเอง FS เป็นช่องว่างเดียวเขตข้อมูลจะถูกคั่นด้วยการเว้นวรรคและ / หรือแท็บและ / หรือบรรทัดใหม่ (แต่ดูการอภิปรายของ --posixด้านล่าง) บันทึก: คุณค่าของ IgnoreCase (ดูด้านล่าง) มีผลกับการแบ่งฟิลด์เมื่อใด FS เป็นนิพจน์ทั่วไปและวิธีการที่เร็กคอร์ดจะถูกแยกออกเมื่อใด อาร์เอส เป็นนิพจน์ทั่วไป

ถ้า FIELDWIDTHS ตัวแปรถูกตั้งค่าเป็นรายการที่คั่นด้วยช่องว่างแต่ละช่องจะมีความกว้างคงที่และ เพ่งพิศ แยกระเบียนโดยใช้ความกว้างที่ระบุ คุณค่าของ FS จะถูกละเลย กำหนดค่าใหม่ให้กับ FS แทนที่ใช้ FIELDWIDTHSและเรียกคืนลักษณะการทำงานเริ่มต้น

แตละชองในเรกคอินพุตอาจถูกอางอิงตามตําแหนง, $1, $2, และอื่น ๆ $0 เป็นบันทึกทั้งหมด ฟิลด์ต้องไม่ถูกอ้างอิงด้วยค่าคงที่:

n = 5พิมพ์ $ n

พิมพ์ฟิลด์ที่ห้าในบันทึกการป้อนข้อมูล

ตัวแปร NF ถูกตั้งค่าเป็นจำนวนฟิลด์ทั้งหมดในเรกคอร์ดอินพุท

การอ้างอิงไปยังฟิลด์ที่ไม่มีอยู่จริง (เช่นฟิลด์หลัง $ NF) ผลิตสตริง null อย่างไรก็ตามการกำหนดให้กับฟิลด์ที่ไม่มีอยู่จริง (เช่น $ (NF + 2) = 5) เพิ่มมูลค่าของ NF, สร้างเขตแทรกแซงใด ๆ ที่มีสตริง null เป็นค่าของพวกเขาและทำให้เกิดค่าของ $0 จะถูกคำนวณใหม่โดยมีฟิลด์ที่คั่นด้วยค่าของ OFS. การอ้างอิงไปยังฟิลด์ที่เป็นตัวเลขเชิงลบทำให้เกิดข้อผิดพลาดร้ายแรง decrementing NF ทำให้ค่าของเขตข้อมูลที่ผ่านมาค่าใหม่จะสูญหายไปและค่าของ $0 จะถูกคำนวณใหม่โดยมีฟิลด์ที่คั่นด้วยค่าของ OFS.

การกำหนดค่าให้กับฟิลด์ที่มีอยู่ทำให้เร็กคอร์ดทั้งหมดถูกสร้างขึ้นมาใหม่เมื่อ $0 ถูกอ้างอิง ในทำนองเดียวกันการกำหนดค่าให้ $0 ทำให้เร็กคอร์ดเป็น resplit สร้างค่าใหม่สำหรับฟิลด์

ตัวแปรภายใน

เพ่งพิศ 's ตัวแปรในตัว:

argc

จำนวนอาร์กิวเมนต์ของบรรทัดคำสั่ง (ไม่รวมถึงตัวเลือก) เพ่งพิศ หรือแหล่งโปรแกรม)

ARGIND

ดัชนีใน ARGV ของไฟล์ปัจจุบันที่กำลังประมวลผล

ARGV

อาร์เรย์ของอาร์กิวเมนต์บรรทัดคำสั่ง อาร์เรย์มีการจัดทำดัชนีตั้งแต่ 0 ถึง argc - 1. เปลี่ยนเนื้อหาแบบไดนามิกของ ARGV สามารถควบคุมไฟล์ที่ใช้สำหรับข้อมูล

binmode

เกี่ยวกับระบบที่ไม่ใช่ POSIX ระบุการใช้โหมด `` ไบนารี '' สำหรับไฟล์ I / O ทั้งหมด ค่าตัวเลข 1, 2 หรือ 3 ระบุว่าไฟล์อินพุตไฟล์ที่ส่งออกหรือไฟล์ทั้งหมดตามลำดับควรใช้ไบนารี I / O ค่าสตริงของ "อาร์", หรือ "W" ระบุว่าไฟล์อินพุตหรือไฟล์ที่ส่งออกตามลำดับควรใช้ไบนารี I / O ค่าสตริงของ "RW" หรือ "WR" ระบุว่าไฟล์ทั้งหมดควรใช้ไบต์ I / O ค่าสตริงอื่น ๆ จะถือว่าเป็น "RW"แต่จะสร้างข้อความเตือน

CONVFMT

รูปแบบการแปลงสำหรับตัวเลข, "% .6g", โดยค่าเริ่มต้น.

ENVIRON

อาร์เรย์ที่มีค่าของสภาพแวดล้อมปัจจุบัน อาร์เรย์ถูกจัดทำดัชนีโดยตัวแปรสภาพแวดล้อมโดยแต่ละองค์ประกอบจะเป็นค่าของตัวแปรนั้น (เช่นENVIRON "HOME" อาจจะ / home / arnold) การเปลี่ยนอาร์เรย์นี้ไม่มีผลกับสภาพแวดล้อมที่โปรแกรมเห็น เพ่งพิศ spawns ผ่านการเปลี่ยนเส้นทางหรือ ระบบ()ฟังก์ชัน

errno

หากมีข้อผิดพลาดของระบบเกิดขึ้นทั้งการเปลี่ยนเส้นทางสำหรับ getlineระหว่างการอ่าน getlineหรือระหว่าง a ปิด()แล้ว errno จะมีสตริงอธิบายข้อผิดพลาด ค่านี้อาจแปลเป็นภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ

FIELDWIDTHS

รายการ Fieldwidths ที่แยกกันอยู่ในพื้นที่สีขาว เมื่อตั้งค่า, เพ่งพิศ แยกวิเคราะห์การป้อนข้อมูลลงในฟิลด์ที่มีความกว้างคงที่แทนการใช้ค่าของ FS ตัวแปรเป็นตัวคั่นฟิลด์

ชื่อไฟล์

ชื่อของไฟล์อินพุตปัจจุบันหากไม่มีการระบุไฟล์ในบรรทัดคำสั่งค่าของ ชื่อไฟล์ คือ `` - '' อย่างไรก็ตาม ชื่อไฟล์ ไม่ได้กำหนดไว้ภายใน เริ่ม บล็อก (เว้นแต่กำหนดโดย getline).

FNR

หมายเลขบันทึกอินพุตในไฟล์อินพุตปัจจุบัน

FS

คั่นฟิลด์อินพุตเป็นช่องว่างตามค่าเริ่มต้น ดู ทุ่ง, ข้างบน.

IgnoreCase

ควบคุมกรณีความไวของนิพจน์ทั่วไปและการดำเนินงานสตริง ถ้า IgnoreCase มีค่าที่ไม่ใช่ค่าศูนย์แล้วเปรียบเทียบสตริงและการจับคู่รูปแบบในกฎการแบ่งฟิลด์ด้วย FS, บันทึกแยกด้วย อาร์เอส, การจับคู่นิพจน์ปกติกับ ~และ !~, และ gensub (), gsub (), ดัชนี(), การจับคู่(), แยก (), และ sub () ในตัวฟังก์ชันทั้งหมดละเว้นกรณีเมื่อทำการแสดงออกปกติ บันทึก: การ subscripting ของอาร์เรย์คือ ไม่ ผลกระทบหรือเป็น asort () ฟังก์ชัน

ดังนั้นถ้า IgnoreCase ไม่เท่ากับศูนย์, / AB / ตรงกับสตริงทั้งหมด "AB", "aB","Ab", และ "AB". เช่นเดียวกับตัวแปร AWK ทั้งหมดค่าเริ่มต้นของ IgnoreCase เป็นศูนย์ดังนั้นนิพจน์ทั่วไปและการดำเนินการสตริงจะเป็นแบบ case-sensitive ภายใต้ Unix ชุดอักขระ Latin-1 ISO 8859-1 แบบเต็มใช้เมื่อละเว้นกรณี

ผ้าสำลี

ให้การควบคุมแบบไดนามิกของ --ผ้าสำลี จากโปรแกรม AWK เมื่อความจริง, เพ่งพิศ พิมพ์คำเตือนผ้าสำลี เมื่อเท็จก็ไม่ได้ เมื่อกำหนดค่าสายอักขระ "ร้ายแรง", คำเตือน lint กลายเป็นข้อผิดพลาดร้ายแรงเหมือน --lint = ร้ายแรง. ค่าที่แท้จริงอื่น ๆ เพียงพิมพ์คำเตือน

NF

จำนวนฟิลด์ในบันทึกข้อมูลปัจจุบัน

NR

จำนวนระเบียนทั้งหมดที่ได้รับจากการป้อนข้อมูล

OFMT

รูปแบบเอาต์พุตสำหรับตัวเลข, "% .6g", โดยค่าเริ่มต้น.

OFS

ตัวคั่นฟิลด์เอาต์พุตเป็นช่องว่างตามค่าเริ่มต้น

ORS

ตัวคั่นบันทึกผลลัพธ์โดยค่าเริ่มต้นเป็นบรรทัดใหม่

PROCINFO

องค์ประกอบของอาร์เรย์นี้ให้การเข้าถึงข้อมูลเกี่ยวกับโปรแกรม AWK ที่กำลังทำงานอยู่ ในบางระบบอาจมีองค์ประกอบในอาร์เรย์ "กลุ่มที่ 1" ตลอด "กลุ่ม n ' สำหรับบางคน n ซึ่งเป็นจำนวนกลุ่มเสริมที่มีในกระบวนการนี้ ใช้ ใน เพื่อทดสอบองค์ประกอบเหล่านี้ องค์ประกอบต่อไปนี้ได้รับการประกันว่าพร้อมใช้งาน:

PROCINFO "egid"

ค่าของ getegid (2) การเรียกระบบ

PROCINFO "EUID"

ค่าของ geteuid (2) การเรียกระบบ

PROCINFO "FS"

"เอฟเอ" ถ้าฟิลด์แบ่งด้วย FS มีผลหรือ "FIELDWIDTHS" ถ้าฟิลด์แบ่งด้วย FIELDWIDTHS มีผลบังคับใช้

PROCINFO "GID"

ค่าของ getgid (2) การเรียกระบบ

PROCINFO "pgrpid"

รหัสกลุ่มกระบวนการของกระบวนการปัจจุบัน

PROCINFO "pid"

รหัสกระบวนการของกระบวนการปัจจุบัน

PROCINFO "PPID"

รหัสกระบวนการหลักของกระบวนการปัจจุบัน

PROCINFO "โพสต์"

ค่าของ getuid (2) การเรียกระบบ

อาร์เอส

ตัวคั่นบันทึกอินพุตโดยค่าเริ่มต้นเป็นบรรทัดใหม่

RT

terminator บันทึก เพ่งพิศ ชุด RT เป็นข้อความเข้าที่ตรงกับอักขระหรือนิพจน์ทั่วไปที่ระบุโดย อาร์เอส.

rstart

ดัชนีของอักขระตัวแรกที่จับคู่ด้วย การจับคู่(); 0 ถ้าไม่มีการจับคู่ (ซึ่งหมายความว่าดัชนีตัวอักษรเริ่มต้นที่หนึ่ง)

RLENGTH

ความยาวของสตริงที่จับคู่ด้วย การจับคู่(); -1 ถ้าไม่มีการแข่งขัน

SUBSEP

อักขระที่ใช้ในการแยก subscripts หลายตัวในองค์ประกอบอาร์เรย์โดยค่าเริ่มต้น ' 034'.

TEXTDOMAIN

โดเมนข้อความของโปรแกรม AWK; ใช้เพื่อหาคำแปลที่แปลเป็นภาษาท้องถิ่นสำหรับสตริงของโปรแกรม

อาร์เรย์

อาร์เรย์ถูกจัดกลุ่มด้วยนิพจน์ระหว่างวงเล็บเหลี่ยม ( และ ) ถ้านิพจน์เป็นรายการนิพจน์ ( expr , expr … ) แล้วอาร์เรย์ subscript เป็นสตริงที่ประกอบด้วยการรวมกันของค่า (สตริง) ของนิพจน์แต่ละคั่นด้วยค่าของ SUBSEP ตัวแปร. สถานที่นี้ใช้ในการจำลองอาร์เรย์ที่มีการคูณด้วยทวีคูณ ตัวอย่างเช่น:

i = "A"; j = "B"; k = "C"x i, j, k = "สวัสดี, โลก n"

กำหนดสายอักขระ "สวัสดี, โลก n" กับองค์ประกอบของอาร์เรย์ x ซึ่งมีการจัดทำดัชนีโดยสตริง"A 034B 034C". อาร์เรย์ทั้งหมดใน AWK มีการเชื่อมโยงซึ่ง ได้แก่ การจัดทำดัชนีตามค่าสตริง

ผู้ดำเนินการพิเศษ ใน อาจใช้ใน a ถ้า หรือ ในขณะที่ เพื่อดูว่าอาร์เรย์มีดัชนีประกอบด้วยค่าเฉพาะหรือไม่

ถ้าอาร์เรย์การพิมพ์ (val in array) val

หากอาร์เรย์มีดัชนีย่อยหลายตัวให้ใช้ (i, j) ในอาร์เรย์.

ใน สร้างอาจใช้ใน a สำหรับ ลูปเพื่อย้ำถึงองค์ประกอบทั้งหมดของอาร์เรย์

องค์ประกอบอาจถูกลบออกจากอาร์เรย์โดยใช้ ลบ คำแถลง ลบ นอกจากนี้ยังสามารถใช้เพื่อลบเนื้อหาทั้งหมดของอาร์เรย์ได้ด้วยการระบุชื่ออาเรย์โดยไม่มีดัชนีย่อย

การพิมพ์และการแปลงตัวแปร

ตัวแปรและฟิลด์อาจเป็นตัวเลข (ลอยตัว) หรือสตริงหรือทั้งสองอย่าง วิธีการตีความค่าของตัวแปรขึ้นอยู่กับบริบทของมัน ถ้าใช้ในนิพจน์ตัวเลขตัวเลขจะถือว่าเป็นตัวเลขหากใช้เป็นสตริงจะถือว่าเป็นสตริง

บังคับตัวแปรให้ถือว่าเป็นตัวเลขให้เพิ่ม 0 ขึ้นไป บังคับให้มันได้รับการปฏิบัติเป็นสตริง concatenate กับสตริง null

เมื่อต้องแปลงสตริงให้เป็นตัวเลขการแปลงทำได้โดยใช้ strtod (3) หมายเลขจะถูกแปลงเป็นสตริงโดยใช้ค่าของ CONVFMT เป็นสตริงรูปแบบสำหรับ sprintf (3) ด้วยค่าตัวเลขของตัวแปรเป็นอาร์กิวเมนต์ อย่างไรก็ตามแม้ว่าตัวเลขทั้งหมดใน AWK จะเป็นจุดลอยตัวค่าปริยายคือ เสมอ แปลงเป็นจำนวนเต็ม ดังนั้นให้

CONVFMT = "% 2.2f" a = 12 b = a ""

ตัวแปร มีค่าสตริงของ '12' และไม่ '12.00'.

เพ่งพิศ ทำการเปรียบเทียบดังนี้: ถ้าสองตัวแปรเป็นตัวเลขพวกเขาจะถูกเปรียบเทียบเป็นตัวเลข หากค่าหนึ่งเป็นตัวเลขและอีกอันหนึ่งมีค่าสายอักขระที่เป็น "ตัวเลขสตริง" การเปรียบเทียบจะทำด้วยตัวเลข มิฉะนั้นค่าตัวเลขจะถูกแปลงเป็นสตริงและทำการเปรียบเทียบสตริง สองสตริงถูกเปรียบเทียบเป็นสตริง โปรดทราบว่ามาตรฐาน POSIX ใช้แนวคิดของ `` ตัวเลขสตริง '' ทุกที่แม้จะเป็นสตริงที่ยังคงอยู่ อย่างไรก็ตามนี่เป็นข้อผิดพลาดที่ไม่ถูกต้องและ เพ่งพิศ ไม่ทำเช่นนี้ (โชคดีที่ได้รับการแก้ไขในรุ่นถัดไปของมาตรฐานนี้)

โปรดสังเกตว่าค่าสตริงที่เช่น '57', มี ไม่ สตริงตัวเลขเป็นค่าสตริง ความคิดของ `` ตัวเลขสตริง '' ใช้เฉพาะกับเขตข้อมูล, getline การป้อนข้อมูล ชื่อไฟล์, ARGV องค์ประกอบ ENVIRON องค์ประกอบและองค์ประกอบของอาร์เรย์ที่สร้างขึ้นโดย แยก () ที่เป็นสตริงตัวเลข ความคิดพื้นฐานคือว่า ข้อมูลผู้ใช้ และการป้อนข้อมูลของผู้ใช้เท่านั้นที่มีลักษณะตัวเลขควรได้รับการปฏิบัติแบบนั้น

Uninitialized variables มีค่าตัวเลข 0 และค่าสตริง "" (null หรือ empty, string)

Octal และ Hexadecimal Constants

เริ่มต้นด้วยเวอร์ชัน 3.1 จาก Gawk, คุณอาจใช้ค่า C และรูปแบบเลขฐานสิบหกในรหัสแหล่งโปรแกรม AWK ของคุณ ตัวอย่างเช่นค่าฐานแปด 011 มีค่าเป็นทศนิยม 9และค่าฐานสิบหก 0x11 มีค่าเป็นทศนิยม 17

สตริงคงที่

สตริงค่าคงที่ใน AWK คือลำดับของอักขระที่อยู่ระหว่างเครื่องหมายคำพูดคู่ (') ภายในสตริงบางอย่าง ลำดับหนี ได้รับรู้เช่นใน C. เหล่านี้คือ:

\

เครื่องหมายทับขวาแบบอักษร

a

อักขระ `` alert ''; ปกติอักขระ ASCII BEL

Backspace

ฟีดรูปแบบ.

n

ขึ้นบรรทัดใหม่

r

กลับรถ

t

แท็บแนวนอน

วี

แท็บแนวตั้ง

x ตัวเลขฐานสิบหก

อักขระที่แสดงโดยสตริงเลขฐานหกหลักตามอักขระ x. ใน ANSIC ตัวเลขเลขฐานสิบหกต่อไปนี้ทั้งหมดจะถือว่าเป็นส่วนหนึ่งของลำดับการหลบหนี (คุณลักษณะนี้ควรบอกให้เราทราบเกี่ยวกับการออกแบบภาษาโดยคณะกรรมการ) เช่นกัน, " X1B" เป็นอักขระ ASCIIESC (escape)

ววว

อักขระที่แสดงด้วยลำดับเลข 1 หลัก 2 หลักหรือ 3 หลัก เช่น., ' 033' คืออักขระ ASCII ESC (escape)

ตัวอักษร ค .

ลำดับการหลบหนีอาจใช้ภายในการแสดงผลปกติอย่างสม่ำเสมอ (เช่น/ t f n r v / ตรงกับตัวอักษร whitespace)

ในโหมดความเข้ากันได้อักขระที่แสดงโดยลำดับเลขทศนิยมฐานสิบหกและหกจะได้รับการปฏิบัติตามตัวอักษรเมื่อใช้ในค่าคงที่การแสดงออกปกติ ดังนั้น, / a 52B / เท่ากับ/ a * b /.

รูปแบบและการดำเนินการ

AWK เป็นภาษาที่เน้นบรรทัด รูปแบบมาก่อนแล้วจึงดำเนินการ แถลงการณ์การกระทำถูกบรรจุไว้ใน { และ }. รูปแบบอาจหายไปหรือการดำเนินการอาจหายไป แต่ไม่ใช่ทั้งสองอย่าง ถ้ารูปแบบหายไปการดำเนินการจะดำเนินการสำหรับทุกระเบียนเดียวของการป้อนข้อมูล การดำเนินการที่ขาดหายไปจะเท่ากับ

{print}

ซึ่งจะพิมพ์บันทึกทั้งหมด

ความคิดเห็นเริ่มต้นด้วยอักขระ `` # '' และดำเนินการต่อไปจนกว่าจะถึงตอนท้ายของบรรทัด บรรทัดว่างอาจถูกใช้เพื่อแยกงบ โดยปกติคำสั่งจะลงท้ายด้วย newline อย่างไรก็ตามนี่ไม่ใช่กรณีสำหรับบรรทัดที่ลงท้ายด้วย "," {, ?, :, &&, หรือ ||. เส้นที่ลงท้ายด้วย ทำ หรือ อื่น ยังมีคำสั่งของพวกเขาโดยอัตโนมัติต่อไปในบรรทัดต่อไปนี้ ในกรณีอื่น ๆ บรรทัดสามารถต่อได้โดยการสิ้นสุดด้วย 'ซึ่งในกรณีนี้บรรทัดใหม่จะถูกละเลย

คำพูดหลายคำอาจวางไว้ในบรรทัดเดียวโดยแยกคำว่า ``; '' ซึ่งใช้กับทั้งสองข้อความภายในส่วนการกระทำของคู่การทำงานของรูปแบบ (กรณีปกติ) และกับงบแบบการดำเนินการด้วยตัวเอง

รูปแบบ

รูปแบบ AWK อาจเป็นรูปแบบใดรูปแบบหนึ่งดังต่อไปนี้:

เริ่ม END / นิพจน์ทั่วไป / การแสดงออกเชิงสัมพันธ์ แบบแผน && แบบแผน แบบแผน || แบบแผน แบบแผน ? แบบแผน : แบบแผน ( แบบแผน ) ! แบบแผน pattern1 , pattern2

เริ่ม และ END เป็นรูปแบบพิเศษสองรูปแบบที่ไม่ได้ทดสอบกับอินพุท ส่วนการดำเนินการทั้งหมด เริ่ม รูปแบบต่างๆจะถูกรวมเข้าด้วยกันเสมือนว่างบทั้งหมดถูกเขียนขึ้นในชุดเดียว เริ่ม กลุ่ม พวกเขาจะดำเนินการก่อนที่จะมีการป้อนข้อมูลใด ๆ ที่จะอ่าน ในทำนองเดียวกันทั้งหมด END บล็อคถูกรวมเข้าด้วยกันและดำเนินการเมื่ออินพุตทั้งหมดหมด (หรือเมื่อ a ทางออก คำสั่งจะถูกดำเนินการ) เริ่ม และ END รูปแบบไม่สามารถใช้ร่วมกับรูปแบบอื่น ๆ ในการแสดงออกของรูปแบบ เริ่ม และ END รูปแบบไม่สามารถมีส่วนการดำเนินการที่ขาดหายไป

สำหรับ / นิพจน์ทั่วไป / รูปแบบคำสั่งที่เกี่ยวข้องจะถูกดำเนินการสำหรับระเบียนข้อมูลขาเข้าที่ตรงกับนิพจน์ทั่วไป นิพจน์ปกติเหมือนกันกับใน egrep (1) และสรุปได้ดังต่อไปนี้

การแสดงออกเชิงสัมพันธ์ สามารถใช้โอเปอเรเตอร์ใดก็ได้ที่ระบุไว้ด้านล่างในส่วนการดำเนินการ เหล่านี้โดยทั่วไปทดสอบว่าฟิลด์บางอย่างตรงกับนิพจน์ปกติบางอย่าง

&&, ||, และ ! ตัวดำเนินการเป็นตรรกะและตรรกะ OR และตรรกะไม่ตามลำดับเช่นเดียวกับ C. พวกเขาทำการประเมินลัดวงจรเช่นเดี