runawk היא עטיפה זעירה למתורגמן AWK שimpements מערכת מודול ועוזר לכתוב את תוכניות AWK עצמאיות.
מוטיבציה
לאחר שנים של שימוש AWK לתכנות אני כבר נמצא כי למרות
הפשטות ומגבלותיו AWK הוא מספיק טוב בשביל scripting רחב
מגוון של משימות שונות. AWK אינו poweful כמו שלהם גדול יותר
עמיתים כמו Perl, Ruby, TCL ואחרים אבל יש לו משלהם
יתרונות כמו קומפקטיות, פשטות וזמינות כמעט בכל
מערכות דמויות-יוניקס. אני אישית גם אוהב הטבע מונע הנתונים שלה ו
נטייה אסימון, טכניקה שימושית מאוד לעיבוד טקסט פשוט
כלי עזר.
אבל! למרבה הצער AWK מתורגמנים חסרי כמה תכונות חשובות ו
לפעמים עובד לא טוב כמו שזה whould להיות.
חלק מהבעיות שאני רואה (חלקם, כמובן).
1) AWK חסר תמיכה במודולים. גם אם אני יוצר תוכניות קטנות, אני
לעתים קרובות רוצה להשתמש בפונקציות שנוצרו לפני כן וכבר השתמש ב
תסריטים אחרים. כלומר, זה whould מצוין orginise פונקציות ל
מה שנקרא ספריות (מודולים).
2) על מנת לעבור לטיעונים #! / Usr / bin / awk -f תסריט (שלא awk
מתורגמן), יש צורך prepand רשימה
ויכוחים עם - (מינוס שתי signes). לדעתי, זה נראה רע.
לדוגמא:
awk_program:
& Nbsp; & nbsp; & nbsp; #! / Usr / bin / awk -f
& Nbsp; & nbsp; & nbsp; אתחיל {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {ל( i i = 1;; i
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; }
מושב Shell:
& 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; אתחיל {
& 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; }
מושב Shell:
& Nbsp; & nbsp; & nbsp; % מבחן הד | awk_program - --flag
& Nbsp; & nbsp; & nbsp; % מבחן הד | awk_program - --flag / dev / stdin
& Nbsp; & nbsp; & nbsp; דגל = 0 1 $ = מבחן
& Nbsp; & nbsp; & nbsp; %
באופן אידיאלי awk_program צריך לעבוד ככה
& Nbsp; & nbsp; & nbsp; % מבחן הד | awk_program --flag
& Nbsp; & nbsp; & nbsp; דגל = 0 1 $ = מבחן
& 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 | זפת -xf-
2) cd runawk-X-Y-Z
3) לעשות
4) (אופציונאלי!) לעשות להתקין dirs
5) לעשות להתקין
יש הרבה משתנה Makefile שניתן לשנות ב
. התקנה & nbsp; משתניו של Runawk (כל מה שהם נמצאים בהתחלה של
Makefile):
& Nbsp; PREFIX & 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; אנדיר - שבו דפים ידניים מותקנים ל
& Nbsp; BINOWN - runawk בעלי ההפעלה
& Nbsp; BINGRP - runawk קבוצת הפעלה
& Nbsp; MANOWN - בעלים של דף גבר
& Nbsp; MANGRP - קבוצת דפי גבר
לדוגמא:
& Nbsp; & nbsp; CC env = gcc
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; PREFIX = / home / cheusov / מקומי
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; LDFLAGS = '- L / usr / pkg / lib -Wl, -rpath -Wl, / usr / pkg / 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 = 'אני / usr / pkg / כולל
& 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, 'אני, וכל האפשרויות הארוכות הוסרו לחלוטין.
מה חדש בגרסת 1.4.4:
- באג בהסרת תיקיות המשנה בספרייה זמנית היה קבוע.
חדשה בגרסת 1.4.3
מהו:
- (1) אינו משתמש במערכת
paexec ( 3) יותר להסרת הספרייה הזמנית.
- print_help הפונקציה () הועבר ממודול power_getopt.awk לinit_getopt.awk.
מה חדש בגרסת 1.4.2:
- גרסה זו מוסיפה runawk_modules.3 שבו כל המודולים מתועד, deprecates אפשרויות רבות, מסיר את אפשרויות -i ו'אני, וכולל דפי גבר בtarball ההפצה כל כך pod2man אין צורך לבנייה.
מה חדש בגרסת 1.4.0:
-
בexitnow.awk, exitnow (סטטוס) פונקציה כעת מסיימת את הביצוע של התסריט מבלי להפעיל את סעיפי END גם אם == מעמד 0.
- מודול החדש io.awk כולל is_ הפונקציות {קובץ, dir, 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:
- תיקון להודעת אזהרת מהדר Intel C.
מה חדש בגרסת 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 מגדיר את משתני הסביבה הבאות לsubprocess awk ילד: RUNAWK_MODC - מספר מודולים (filename -f) עבר לAWK RUNAWK_MODV_ - נתיב מלא ל#n מודול , כאשר n הוא בטווח [0..RUNAWK_MODC). RUNAWK מגדיר משתנה סביבת RUNAWK_ART_STDIN לsubprocess awk ילד 1 אם נוספים / מלאכותי '- `התווסף לרשימה לטיעוניו של awk. Makefile: bmake-איזם הוסר. עכשיו Makefile תואם באופן מלא עם איפור FreeBSD. יעד CLEANFILES משמש במקום של תיקון קטן כללים בעבודת יד ביעד 'test_all'
תגובות לא נמצא