runawk เป็นเสื้อคลุมเล็ก ๆ สำหรับล่าม AWK ที่ impements ระบบโมดูลและช่วยในการเขียนโปรแกรม AWK แบบสแตนด์อโลน
แรงจูงใจ
หลังจากหลายปีของการใช้ AWK สำหรับการเขียนโปรแกรมที่ฉันได้พบว่าแม้จะมีของ
ความเรียบง่ายและข้อ จำกัด ของมัน AWK ดีพอสำหรับการเขียนสคริปต์กว้าง
ช่วงของงานที่แตกต่าง AWK ไม่เป็น poweful เป็นขนาดใหญ่ของพวกเขา
คู่เช่น Perl, ทับทิม, ทีซีแอลและคนอื่น ๆ แต่มันก็มีเป็นของตัวเอง
ข้อได้เปรียบเช่นแน่นเรียบง่ายและความพร้อมในเกือบทุก
ระบบ UNIX เหมือน ผมเองก็ชอบธรรมชาติที่ขับเคลื่อนด้วยข้อมูลและ
ปฐมนิเทศโทเค็นเทคนิคที่มีประโยชน์มากสำหรับการประมวลผลข้อความที่เรียบง่าย
สาธารณูปโภค
แต่! แต่น่าเสียดายที่ awk ล่ามขาดคุณสมบัติที่สำคัญและ
บางครั้งทำงานไม่ดีเท่าที่มันจะเป็น whould
ปัญหาบางอย่างที่ฉันเห็น (บางส่วนของพวกเขาแน่นอน)
1) AWK ขาดการสนับสนุนสำหรับโมดูล แม้ว่าผมจะสร้างโปรแกรมเล็ก ๆ ผม
มักจะต้องการที่จะใช้ฟังก์ชั่นที่สร้างขึ้นก่อนหน้านี้และใช้อยู่แล้วใน
สคริปต์อื่น ๆ นั่นคือมัน Whould ที่ดีในการ orginise ฟังก์ชั่นเป็น
ห้องสมุดที่เรียกว่า (โมดูล)
2) เพื่อที่จะผ่านข้อโต้แย้ง #! / usr / bin / awk -f สคริปต์ (เพื่อไม่ให้ awk
ล่าม) มันเป็นความจำเป็นที่จะ prepand รายการ
ข้อโต้แย้งที่มี - (สองลบป้าย) ในมุมมองของฉันนี้ดูไม่ดี
ตัวอย่าง:
awk_program:
& nbsp; & nbsp; & nbsp; #! / usr / bin / awk -f
& nbsp; & nbsp; & nbsp; BEGIN {
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; สำหรับ (i = 1; i
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& nbsp; & nbsp; & nbsp; }
เซสชั่นเชลล์:
& nbsp; & nbsp; & nbsp; % awk_program --opt1 --opt2
& nbsp; & nbsp; & nbsp; / usr / bin / awk: ตัวเลือกที่ไม่รู้จัก --opt1 ละเลย
& nbsp; & nbsp; & nbsp; / usr / bin / awk: ตัวเลือกที่ไม่รู้จัก --opt2 ละเลย
& nbsp; & nbsp; & nbsp; % awk_program - --opt1 --opt2
& nbsp; & nbsp; & nbsp; ARGV [1] = - opt1
& nbsp; & nbsp; & nbsp; ARGV [2] = - OPT2
& nbsp; & nbsp; & nbsp; %
ในสคริปต์ awk_program ความคิดของฉันควรจะทำงานเช่นนี้ (เช่นเดียวกับ
โปรแกรมทำปกติ)
& nbsp; & nbsp; & nbsp; % awk_program --opt1 --opt2
& nbsp; & nbsp; & nbsp; ARGV [1] = - opt1
& nbsp; & nbsp; & nbsp; ARGV [2] = - OPT2
& nbsp; & nbsp; & nbsp; %
มันเป็นไปได้โดยใช้ runawk
3) เมื่อ #! / usr / bin / awk -f สคริปต์จัดการกับข้อโต้แย้ง (ตัวเลือก) และต้องการ
อ่านจาก stdin มันเป็นสิ่งจำเป็นที่จะเพิ่ม
/ dev / stdin (หรือ `- ') เป็นอาร์กิวเมนต์สุดท้าย explicitely
ตัวอย่าง:
awk_program:
& nbsp; & nbsp; & nbsp; #! / usr / bin / awk -f
& nbsp; & nbsp; & nbsp; BEGIN {
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ถ้า (ARGV [1] == "--flag") {
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ธง = 1
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ARGV [1] = "" # ไม่อ่านไฟล์ชื่อ "--flag"
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& nbsp; & nbsp; & nbsp; }
& nbsp; & nbsp; & nbsp; {
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; พิมพ์ "ธง =" ธง "$ 0 =" 0 $
& nbsp; & nbsp; & nbsp; }
เซสชั่นเชลล์:
& nbsp; & nbsp; & nbsp; % สะท้อนการทดสอบ | awk_program - --flag
& nbsp; & nbsp; & nbsp; % สะท้อนการทดสอบ | awk_program - --flag / dev / stdin
& nbsp; & nbsp; & nbsp; ธง = 1 $ 0 = การทดสอบ
& nbsp; & nbsp; & nbsp; %
จะเป็นการดีที่ awk_program ควรจะทำงานเช่นนี้
& nbsp; & nbsp; & nbsp; % สะท้อนการทดสอบ | awk_program --flag
& nbsp; & nbsp; & nbsp; ธง = 1 $ 0 = การทดสอบ
& nbsp; & nbsp; & nbsp; %
probles ทั้งหมดเหล่านี้จะแก้ไขได้โดย runawk และนี่คือเหตุผลที่ผมเขียนมัน
ฉันยังรวมถึงโมดูลครู่เพื่อ runawk กระจายซึ่งเป็น
มีประโยชน์สำหรับผมและผมหวังว่าจะเป็นประโยชน์สำหรับคุณเกินไป
การติดตั้ง
0) ทำให้ BSD จะต้อง ผมชื่อมันเพียง 'ให้' แต่ชื่อที่แท้จริงของมันอาจ
& nbsp; & nbsp; แตกต่างกัน & nbsp. BMAKE และ pmake เป็นชื่อที่เป็นไปได้
& nbsp; & nbsp; หากคุณจำเป็นต้องเปลี่ยนแปลงตัวเลือกอาคารเริ่มต้น
& nbsp; & nbsp; ทำให้ทำงานเช่นนี้
& nbsp; & nbsp; & nbsp; & nbsp; env [YOUR_ASSIGNMENTS] ทำให้ <เป้าหมาย>
& nbsp; & nbsp; ดูในส่วนของตัวอย่างด้านล่าง
1) tarball ยกเลิกการบีบอัดที่คุณได้ดาวน์โหลดเช่นนี้
& nbsp; & nbsp; gzip -dc runawk-X-Y-Z.tar.gz | tar -xf-
2) cd runawk-X-Y-Z
3) ให้
4) (อุปกรณ์เสริม) ให้ติดตั้ง-dirs
5) ให้ติดตั้ง
มีจำนวนมากของตัวแปร Makefile ที่สามารถเปลี่ยนแปลงได้ในช่วงมี
. การติดตั้ง & nbsp; ตัวแปรของตัวเอง Runawk (ทุกพวกเขาอยู่ที่จุดเริ่มต้นของ
Makefile):
& nbsp; คำนำหน้า & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - กรณีที่ runawk มีการติดตั้ง
& nbsp; MODULESDIR & nbsp; & nbsp; & nbsp; & nbsp; - ไดเรกทอรีที่มีการติดตั้งโมดูลที่จะ
& nbsp; AWK_PROG & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - เส้นทางไปยังล่าม awk
& nbsp; STDIN_FILENAME - เส้นทางไปยังแฟ้มอุปกรณ์ stdin
ตัวแปรที่ทำให้ BSD (ส่วนใหญ่ที่ใช้กันทั่วไป
สำหรับคนอื่น ๆ ทั้งหมด - ดูที่เอกสารให้และไฟล์ .mk)
& nbsp; BINDIR - ที่ runawk ปฏิบัติการตัวเองมีการติดตั้ง
& nbsp; MANDIR - ที่หน้าคู่มือที่จะมีการติดตั้ง
& nbsp; BINOWN - runawk เจ้าของปฏิบัติการ
& nbsp; BINGRP - runawk กลุ่มปฏิบัติการ
& nbsp; Manown - ชายเจ้าของเพจ
& nbsp; MANGRP - คนกลุ่มเพจ
ตัวอย่าง:
& nbsp; & nbsp; env CC gcc =
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; คำนำหน้า = / home / cheusov / ท้องถิ่น
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ldflags = '- L / usr / จ / lib -Wl, -rpath -Wl / usr / จ / lib'
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; LDADD = -lextralib
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; CFLAGS = '- Werror -Wall'
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; CPPFLAGS = -I / usr / จ / รวม
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BINOWN = cheusov
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BINGRP = ผู้ใช้
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Manown = cheusov
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MANGRP = ผู้ใช้
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MKCATPAGES = ไม่
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ทำให้ -s ทั้งหมดติดตั้ง dirs ติดตั้ง
มีอะไรใหม่ ในข่าวประชาสัมพันธ์นี้:
- เลือก -i, -I, และตัวเลือกที่ยาวทั้งหมดถูกลบออกอย่างสมบูรณ์.
- -T ตัวเลือกที่ถูกเพิ่มเข้ามาสำหรับการป้อนข้อมูลแท็บ.
- เลือก v การบันทึกไว้ในหน้าคน.
- การแก้ไขคำเตือนรวบรวม gcc.
- แก้ไขสำหรับการรวบรวมกับ MAKEOBJDIR ไม่ว่างเปล่า.
- แก้ไขสะกดผิดในใหม่ runcmd.awk และหน้าคน.
มีอะไรใหม่ ในรุ่น 1.4.4:
- ข้อผิดพลาดในการลบไดเรกทอรีย่อยในไดเรกทอรีชั่วคราวเป็น คง.
- การปรับปรุงสำหรับ runawk_modules.3.
มีอะไรใหม่ ในรุ่น 1.4.3:
- paexec (1) ไม่ได้ใช้ระบบ ( 3) อีกต่อไปสำหรับการลบไดเรกทอรีชั่วคราว.
- print_help ฟังก์ชั่น () ถูกย้ายจากโมดูล power_getopt.awk เพื่อ init_getopt.awk.
มีอะไรใหม่ ในรุ่น 1.4.2:
- รุ่นนี้จะเพิ่ม runawk_modules.3 ที่โมดูลทั้งหมดที่มี เอกสาร deprecates ตัวเลือกยาวที่เอาตัวเลือก -i และ -I และรวมถึงหน้าคนใน tarball กระจายดังนั้น pod2man ไม่จำเป็นสำหรับอาคาร.
มีอะไรใหม่ ในรุ่น 1.4.0:
- ใน exitnow.awk, exitnow (สถานะ) ฟังก์ชั่นในขณะนี้เสร็จสิ้นการทำงานของสคริปต์โดยไม่ต้องใช้ส่วน END แม้ว่าสถานะ == 0.
- โมดูลใหม่ io.awk รวมถึงฟังก์ชั่น is_ {ไฟล์ผบ, exec ซ็อกเก็ต FIFO, blockdev, chardev, symlink} file_size และ FILE_TYPE tokenre.awk splitre0 มีฟังก์ชั่นใหม่ ().
มีอะไรใหม่ ในรุ่น 1.3.2:
- อาร์เรย์ภายในจะย้ายไปอยู่ในขณะนี้โดยอัตโนมัติ นี้ช่วยแก้ไขการใช้ runawk (1) ร่วมกับ xargs (1) เช่น files.txt แมว |. xargs runawk -e '... '
มีอะไรใหม่ ในรุ่น 1.3.0:
- การแก้ไขสำหรับข้อความแจ้งเตือนคอมไพเลอร์ของอินเทลซี
- การแก้ไขสำหรับ shquote ฟังก์ชั่น () จากโมดูล / shquote.awk.
- รหัสแหล่งที่มาของโครงการที่ได้รับการจัดจึงทำให้การติดตั้งง่ายของโครงการย่อยใด ๆ . ตัวอย่าง, โมดูล, runawk, alt_getopt และเอกสาร (สิ่งที่ต้องทำ, README ไฟล์อื่น ๆ )
มีอะไรใหม่ ในรุ่น 1.1.0:
- ตัวเลือก -F ถูกเพิ่มเข้ามา
- ord.awwas ใหม่ ftrans_in.awk และโมดูล glob.awk ถูกรวม.
- ปฏิบัติการ alt_getopt ใหม่ถูกรวมสำหรับการแยกตัวเลือกสั้นและระยะยาวในสคริปต์เปลือก.
- min3 ใหม่, min4, min5, min_key, MIN_VALUE และ key_of_min_value (min.awk) และ max3, max4, max5, max_key, MAX_VALUE และ key_of_max_value (max.awk) ฟังก์ชั่นมีให้.
- ตัวอย่างใหม่ถูกเพิ่ม:. ตัวอย่าง / demo_minmax ตัวอย่าง / demo_tokenre3 ตัวอย่าง / demo_ftrans ตัวอย่าง / demo_glob *
- คุณลักษณะใหม่ที่ถูกเพิ่มเข้ามาใน multisub.awk.
- การปรับปรุงไมเนอร์ได้ทำในขั้นตอนการติดตั้ง.
มีอะไรใหม่ ในรุ่น 0.16.0:
- จำนวนมากของโปรแกรมสาธิตที่สุดโมดูล runawk ถูกสร้างขึ้น และพวกเขาอยู่ในตัวอย่าง / ไดเรกทอรีย่อยในขณะนี้ โมดูล MEGA ใหม่;-) power_getopt.awk ดูเอกสารและโปรแกรมการสาธิตตัวอย่าง / demo_power_getopt มันทำให้ตัวเลือกการจัดการที่ง่ายจริงๆ โมดูลใหม่: embed_str.awk has_suffix.awk has_prefix.awk readfile.awk modinfo.awk แก้ไขไมเนอร์และการปรับปรุงใน dirname.awk และ basename.awk ตอนนี้พวกเขาจะเข้ากันได้อย่างเต็มที่กับ dirname (1) และ basename (1) RUNAWK กำหนดตัวแปรสภาพแวดล้อมต่อไปนี้สำหรับเด็ก awk กระบวนการย่อย: RUNAWK_MODC - จำนวนโมดูล (ชื่อไฟล์ -f) ส่งผ่านไปยัง AWK RUNAWK_MODV_ - เส้นทางแบบเต็มเพื่อ #N โมดูล ที่ n คือใน [0..RUNAWK_MODC) ช่วง RUNAWK ชุด RUNAWK_ART_STDIN ตัวแปรสภาพแวดล้อมสำหรับเด็ก awk กระบวนการย่อย 1 ถ้าเพิ่มเติม / เทียม `- 'ถูกเพิ่มเข้าไปในรายการเพื่อการขัดแย้งของ awk Makefile: BMAKE ลัทธิถูกถอดออก ตอนนี้ Makefile เป็นอย่างเข้ากันได้กับการทำ FreeBSD เป้าหมาย CLEANFILES ถูกนำมาใช้แทนของกฎที่ทำด้วยมือการแก้ไขเล็กน้อยใน 'test_all' เป้าหมาย
ความคิดเห็นที่ไม่พบ