awk, mawk, nawk, gawk …อะไรนะ?


37

ฉันเพิ่งเริ่มเรียนรู้ awk และฉันสับสนเล็กน้อยเกี่ยวกับรุ่นเหล่านั้นทั้งหมด มี "รุ่น" ใดบ้างที่พบในระบบ Unix ที่เหมือนกันทั้งหมดหรือไม่ คุณรู้ไหมไว vi? awk มาตรฐานสนับสนุนตัวเลือก -F หรือไม่

คำตอบ:


37

awk - พบมากที่สุดและพบได้ในระบบที่เหมือน Unix ส่วนใหญ่รุ่นที่เก่าที่สุดและด้อยกว่าระบบที่ใหม่กว่า

mawk - การติดตั้ง AWK ที่รวดเร็วซึ่งเป็นรหัสฐานขึ้นอยู่กับล่ามรหัสไบต์

nawk - ในขณะที่ภาษา AWK ได้รับการพัฒนาผู้เขียนออกรุ่นใหม่ (ดังนั้นn - n ew awk) เพื่อหลีกเลี่ยงความสับสน คิดเหมือน Python 3.0 ของ AWK

gawk - ตัวย่อจาก GNU awk รุ่นเดียวที่นักพัฒนาพยายามเพิ่มการสนับสนุน i18n อนุญาตให้ผู้ใช้เขียนไลบรารีที่แบ่งใช้ C ของตนเองเพื่อขยายด้วย "ปลั๊กอิน" ของตนเอง รุ่นนี้เป็นการใช้งานมาตรฐานสำหรับ Linux ต้นฉบับ AWK เขียนขึ้นสำหรับ Unix v7

มีเวอร์ชันอื่น ๆ เช่น jawk (การติดตั้งจาวา), bwk (การนำไปใช้ของ Brian W. Kernighan) เป็นต้น


3
awk ดั้งเดิมไม่มีอยู่ในระบบที่เหมือนกับ Unix ที่ฉันมีให้ บ่อยครั้งที่/usr/bin/awkจะเรียกใช้ nawk หรือ gawk หรือ BusyBox awk (คล้ายกับพฤติกรรมในการ gawk)
dubiousjim

10
ตั้งแต่ปลายปี 2012 ระบบ Ubuntu / Debian ติดตั้ง mawk โดยค่าเริ่มต้น บรรทัดคำสั่งfile /etc/alternatives/awkจะส่งกลับsymbolic link to /usr/bin/mawk
Mike Sherrill 'Cat Recall'

MAWK มีฟังก์ชัน GAWK ทั้งหมดเช่นอาร์เรย์หลายมิติจริงหรือไม่
WYSIWYG

2
@JordonBedwell ใช่ .. มี: ซ้ำ repex เป็นไปไม่ได้ใน mawk นอกจากนี้ยังไม่รองรับอาร์เรย์หลายมิติ
WYSIWYG

1
@dubiousjim Ubuntu มี awk ดั้งเดิมในที่เก็บจักรวาล
jarno

6

awkคุณก็สามารถใช้ มันถูกกำหนดโดย POSIX และดังนั้นจึงต้องมีอยู่ในทุกระบบที่สอดคล้องกับ POSIX

-Fพารามิเตอร์ได้รับคำสั่งจากที่ได้เป็นอย่างดี


1
... แต่โปรดตรวจสอบกับมาตรฐานเพื่อบอกสิ่งที่คุณสามารถใช้เพื่อประกันความเข้ากันได้กับเวอร์ชันอื่น ยกตัวอย่างเช่นอย่าใช้gensub()ทดสอบด้วยawk-> gawkและคิดว่าคุณน่าจะไป ...
dmckee

1
@dmckee คุณสามารถใช้gawk --posixเพื่อทำให้การเพ่งพิศทำงานตามมาตรฐาน POSIX นอกจากนี้ยังตรวจสอบสคริปต์ของคุณตามมาตรฐาน คุณสามารถใช้awk --posix '' 2>/dev/nullใน Ubuntu ได้ไม่ว่าจะใช้gawk, mawk หรือ original-awk เป็น awk แต่ posix-option นั้นเป็นที่รู้จักโดย gawk เท่านั้น --posix ต้องเป็นตัวเลือกสุดท้ายสำหรับ original-awk คุณสามารถใช้awk -W posix ''กับเพ่งพิศและเหยี่ยว
jarno

1
@dmckee, oh mawk --posix ''ล้มเหลวถ้าคุณใช้ mawk 1.3.3 แต่ประสบความสำเร็จกับข้อความแสดงข้อผิดพลาดถ้าคุณใช้ mawk 1.3.4
jarno

1

awkจะใช้งานได้กับระบบ * NIX ทุกตัว แต่ข้อมูลจำเพาะที่แน่นอนของสิ่งที่รองรับจะเปลี่ยนไปเล็กน้อยเนื่องจากเป็นไปได้ทั้งหมดมันจะถูก symlinked กับเวอร์ชันที่แตกต่างคล้ายกับวิธีที่/bin/shลิงก์กับเชลล์เฉพาะบ่อยครั้งbashหรืออย่างใดอย่างหนึ่ง อนุพันธ์ของมัน (สำหรับเร็กคอร์ดฉันก็รู้ว่ามีเครื่องจักรจำนวนมากที่เชื่อมviโยงกับvimเช่นกัน)


ไม่จำเป็นต้องเชื่อมโยงกันเสมอ บางครั้งมันเชื่อมโยงอย่างหนัก
dubiousjim

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.