Skip to main content

פיקוד פיקוד יוניקס

איך ללמד את הכלב לבוא אליי? (טעויות נפוצות) (יוני 2026)

איך ללמד את הכלב לבוא אליי? (טעויות נפוצות) (יוני 2026)
Anonim

שם

gawk - דפוס סריקה ועיבוד שפה

תקציר

גאווק אפשרויות POSIX או GNU -f מסמך תוכנית -- קובץ …גאווק אפשרויות POSIX או GNU -- טקסט של טקסט …

pgawk אפשרויות POSIX או GNU -f מסמך תוכנית -- קובץ …pgawk אפשרויות POSIX או GNU -- טקסט של טקסט …

תיאור

Gawk הוא יישום גנו של שפת התכנות AWK. הוא תואם להגדרת השפה בתקן POSIX 1003.2 Command Language and Utilities. גרסה זו בתורו מבוססת על תיאור ב שפת תכנות AWK , על ידי Aho, Kernighan ו- Weinberger, עם התכונות הנוספות הנמצאות בגרסת System V Release 4 של UNIX אוק . Gawk מספק גם מעבדות בל האחרונות אוק תוספים ומספר תוספים ספציפיים ל- GNU.

פגאוק היא גרסה של פרופיל גאווק . זה זהה בכל דרך גאווק , אלא שהתוכניות פועלות לאט יותר, ומייצרות באופן אוטומטי פרופיל ביצוע בקובץ awkprof.out כשנגמר. ראה - פרופיל , להלן.

שורת הפקודה מורכבת מאפשרויות גאווק עצמה, את טקסט התוכנית AWK (אם לא מסופק באמצעות -f או - אפשרויות), וערכים להיות זמין ב ARGC ו ARGV מוגדרים מראש AWK משתנים.

פורמט אפשרות

Gawk האפשרויות עשויות להיות אופציונליות POSIX אחת אותיות אופציות, או גנו סגנון ארוך אפשרויות. אפשרויות POSIX מתחילות באופציה אחת `` - '', בעוד שהאפשרויות הארוכות מתחילות ב - `` '' '. אפשרויות ארוכות מסופקות הן עבור תכונות ספציפיות ל- GNU והן עבור תכונות המנדט של POSIX.

בעקבות תקן POSIX, גאווק אפשרויות ספציפיות מסופקות באמצעות ארגומנטים אל -W אפשרות. מרובות -W ניתן לספק אופציות -W אופציה קיימת אופציה ארוכה, כמפורט להלן. ארגומנטים לאפשרויות ארוכות מצטרפים לאפשרות על ידי = , ללא רווחים, או שיופיעו בארגומנט הבא. אפשרויות ארוכות יכולות להיות מקוצרות, כל עוד הקיצור נשאר ייחודי.

אפשרויות

Gawk מקבל את האפשרויות הבאות, המפורטות בסדר אלפביתי.

-F fs

- מפריד fs להשתמש fs עבור מפריד שדה הקלט (הערך של FS משתנה מוגדר מראש).

-v var = Value

- הקצה var = Value הקצה את הערך Value למשתנה var , לפני תחילת התוכנית. ערכים משתנים אלה זמינים ל התחל בלוק של תוכנית AWK.

-f מסמך תוכנית

- מסמך תוכנית קרא את מקור התוכנית AWK מהקובץ מסמך תוכנית , במקום בארגומנט שורת הפקודה הראשונה. מרובות -f (או -) ניתן להשתמש באופציות.

-ממ NNN

-אדון NNN הגדר מגבלות זיכרון שונות לערך NNN . ה ו דגל קובע את המספר המרבי של שדות, ואת ייצור הדגל קובע את גודל הרשומה המרבי. אלה שני הדגלים ואת -M אפשרות הם מן המעבדות בל גרסה מחקר של UNIX אוק . הם התעלם מהם גאווק , מאז גאווק אין גבולות מוגדרים מראש.

-Wlass

-W מסורתי

- comppat

- מסורתי הפעל תאימות מצב. במצב תאימות, גאווק מתנהג באופן זהה ל- UNIX אוק ; אף אחד מהתוספים הספציפיים ל- GNU אינו מוכר. השימוש של - מסורתי הוא המועדף על צורות אחרות של אפשרות זו. ראה הרחבות גנו, להלן, לקבלת מידע נוסף.

-Ww copyleft

-WW זכויות יוצרים

--copyleft

--זכויות יוצרים הדפס את הגרסה הקצרה של הודעת המידע של GNU על הפלט הסטנדרטי וצא בהצלחה.

-WW משתנים dump= קובץ

- משתנים - dump= קובץ הדפס רשימה ממוינת של משתנים גלובליים, הסוגים והערכים הסופיים שלהם קובץ . אם לא קובץ מסופק, גאווק משתמש בקובץ בשם awkvars.out בספרייה הנוכחית.

לאחר רשימה של כל המשתנים הגלובליים היא דרך טובה לחפש שגיאות טיפוגרפיות בתוכניות שלך. אתה גם להשתמש באפשרות זו אם יש לך תוכנית גדולה עם הרבה פונקציות, ואתה רוצה להיות בטוח כי הפונקציות שלך לא בטעות להשתמש משתנים גלובליים, כי אתה מתכוון להיות מקומי. (זוהי טעות קלה במיוחד לעשות עם שמות משתנה פשוט כמו אני, י, וכן הלאה.)

- עזרה

-W השימוש

- עזרה

- תשלום הדפס סיכום קצר יחסית של האפשרויות הזמינות על הפלט הסטנדרטי. (לפי תקני קידוד גנו , אפשרויות אלה גורמות ליציאה מיידית מוצלחת).

-Wint מוך= קטלני

--lint= קטלני לספק אזהרות על מבנים כי הם מפוקפקים או לא ניידים ליישומים אחרים. עם ארגומנט אופציונלי של קטלני, אזהרות מוך הופכות לטעויות קטלניות. זה עשוי להיות דרסטי, אבל השימוש בו בהחלט לעודד את הפיתוח של תוכניות AWK נקי.

-Wew מוך

- לינט ישן ספק אזהרות על מבנים שאינם ניידים לגירסה המקורית של יוניקס אוק .

-W gen-po

- gen-po סרוק ולנתח את התוכנית AWK, וליצור גנו .po פורמט קובץ על פלט סטנדרטי עם ערכים עבור כל מחרוזות להתאמה לתכנית. התוכנית עצמה לא מבוצעת. ראה את גנו gettext הפצה למידע נוסף על .po קבצים.

-W שאינם נתונים עשרוניים

- לא עשרוני נתונים לזהות ערכים אוקטליים והקסדצימליים בנתוני הקלט. השתמש באפשרות זו בזהירות רבה!

- פוסקס

--posix זה נדלק תאימות , עם ההגבלות הנוספות הבאות:

*

איקס רצפים להימלט אינם מוכרים.

*

רק החלל והכרטיסייה פועלים כאשר מפרידי שדות FS מוגדר חלל אחד, newline לא.

*

לא ניתן להמשיך שורות לאחר מכן ? ו :.

*

המלים נרדפות func עבור מילת המפתח פונקציה אינו מוכר.

*

המפעילים ** ו **= לא ניתן להשתמש בהם במקום ^ ו ^=.

*

ה fflush () הפונקציה אינה זמינה.

-W פרופיל= prof_file

- פרופיל= prof_file שלח נתוני פרופיל prof_file . ברירת המחדל היא awkprof.out. כאשר לרוץ עם גאווק , הפרופיל הוא רק גרסה "די מודפסת" של התוכנית. כאשר לרוץ עם pgawk , הפרופיל מכיל ספירת ביצוע של כל משפט בתוכנית בשוליים שמאליים וספירת שיחות פונקציה עבור כל פונקציה המוגדרת על ידי המשתמש.

-W מחדש מרווח

- מרווח זמן אפשר את השימוש ביטויים המרווחים בהתאמת הביטוי הרגיל (ראה ביטויים רגולריים, להלן). ביטויים המרווחים לא היו זמינים באופן מסורתי בשפת AWK. תקן POSIX הוסיף אותם, לעשות אוק ו agrep בקנה אחד עם השני. עם זאת, השימוש בהם צפוי לשבור תוכניות AWK הישן, כך גאווק רק מספק אותם אם הם מתבקשים עם אפשרות זו, או מתי --posix צוין.

-W מקור טקסט של טקסט

- המקור טקסט של טקסט להשתמש טקסט של טקסט כמו קוד מקור התוכנית AWK. אפשרות זו מאפשרת שילוב קל של פונקציות הספרייה (בשימוש באמצעות -f ו - אפשרויות) עם קוד המקור שהוזנו בשורת הפקודה. זה מיועד בעיקר בינוני עד גדול תוכניות AWK המשמש סקריפטים פגז.

-W גרסה

- Version הדפס מידע גירסה עבור עותק מסוים זה של גאווק על הפלט הסטנדרטי. זה שימושי בעיקר לדעת אם העותק הנוכחי של גאווק על המערכת שלך מעודכן לגבי מה קרן התוכנה החופשית היא מפיצה. תכונה זו שימושית גם בעת דיווח על באגים. (לפי תקני קידוד גנו , אפשרויות אלה גורמות ליציאה מיידית מוצלחת).

-- סימן את סוף האפשרויות. זה שימושי כדי לאפשר טיעונים נוספים לתוכנית AWK עצמה להתחיל עם `` '' '. זה בעיקר עקביות עם הטיעון ניתוח האמנה בשימוש על ידי רוב תוכניות POSIX אחרים.

במצב תאימות, כל אפשרות אחרת מסומנת כבלתי חוקית, אך מתעלמים ממנה. בפעולה רגילה, כל עוד טקסט התוכנית סופק, אפשרויות לא ידועים מועברים לתוכנית AWK ב ARGV מערך לעיבוד. זה שימושי במיוחד להפעלת תוכניות AWK באמצעות מנגנון התרגום "#!".

ביצוע תוכנית AWK

תוכנית AWK מורכבת מרצף של הצהרות דפוס פעולה והגדרות פונקציונליות אופציונלית.

דפוס { הצהרות פעולה }פונקציה שם ( רשימת פרמטרים ) { הצהרות }

Gawk הראשון קורא את מקור התוכנית מ מסמך תוכנית (ים) אם צוין, מתוך ארגומנטים ל - המקור, או מהארגומנט הראשון שאינו אופציונלי בשורת הפקודה. ה -f ו - המקור אפשרויות ניתן להשתמש מספר פעמים בשורת הפקודה. Gawk קורא את טקסט התוכנית כאילו כל מסמך תוכנית s ו טקסט שורת הפקודה טקסטים היו משורשרים יחד. זה שימושי עבור בניית ספריות של פונקציות AWK, מבלי לכלול אותם בכל תוכנית חדשה AWK המשתמשת בהם. הוא גם מספק את היכולת לערבב פונקציות ספריה עם תוכניות שורת פקודה.

משתנה הסביבה AWKPATH מציין נתיב חיפוש לשימוש בעת איתור קבצי מקור בשם -f אפשרות. אם משתנה זה אינו קיים, נתיב ברירת המחדל הוא": / usr / local / share / awk". (הספרייה בפועל עשויה להשתנות, תלוי איך גאווק נבנה והותקן). אם שם קובץ ניתן ל - -f האפשרות מכילה תו `` '', לא מתבצעת חיפוש נתיב.

Gawk מבצעת תוכניות AWK בסדר הבא. ראשית, כל המטלות המשתנות שצוין באמצעות -v מתבצעת. לאחר מכן, גאווק מהדר את התוכנית לצורה פנימית. לאחר מכן, גאווק מבצעת את הקוד ב - Windows XP התחל בלוקים (אם קיימים), ולאחר מכן ממשיך לקרוא כל קובץ בשם ARGV מערך. אם אין קבצים בשם בשורת הפקודה, גאווק קורא את הקלט הסטנדרטי.

אם שם הקובץ בשורת הפקודה כולל את הטופס var = Value היא מטופלת כמשימה משתנה. המשתנה var יקבל את הערך Value . (זה קורה אחרי כל התחל בלוק (ים) כבר לרוץ.) הקצאת שורת הפקודה הקצאה היא שימושית ביותר עבור הקצאת דינמי ערכים המשתנים AWK משתמש כדי לשלוט על איך קלט נשבר לשדות ורשומות. זה גם שימושי לשליטה המדינה אם עובר מרובים נדרשים על קובץ נתונים יחיד.

אם הערך של אלמנט מסוים של ARGV זה ריק (''), גאווק דילוג על זה.

עבור כל רשומה קלט, גאווק בדיקות כדי לראות אם הוא תואם כל דפוס בתוכנית AWK. עבור כל תבנית שמתאימה הרשומה, המשויך פעולה מתבצע. הדפוסים נבדקים לפי סדר הופעתם בתוכנית.

לבסוף, לאחר כל קלט הוא מותש, גאווק מבצעת את הקוד ב - Windows XP סוף בלוקים (אם קיימים).

משתנים, רשומות ושדות

משתני AWK הם דינמיים; הם באים לידי ביטוי כאשר משתמשים בהם לראשונה. הערכים שלהם הם גם מספרי נקודה צפה או מחרוזות, או שניהם, תלוי איך הם משמשים. AWK יש גם מערכים ממדי אחד; מערכים עם ממדים מרובים עשויים להיות מדומה. מספר משתנים מוגדרים מראש נקבעים כפעילות תוכנית; אלה יתוארו לפי הצורך ומסכומים להלן.

רשומות

בדרך כלל, רשומות מופרדות על ידי תווים חדשים. באפשרותך לשלוט באופן שבו רשומות מופרדות על-ידי הקצאת ערכים למשתנה המובנה RS. אם RS הוא כל תו בודד, תו המפריד בין רשומות. אחרת, RS הוא ביטוי רגיל. טקסט בקלט התואם ביטוי רגיל זה מפריד את הרשומה. עם זאת, במצב תאימות, רק התו הראשון של ערך המחרוזת שלו משמש להפרדת רשומות. אם RS מוגדר למחרוזת null, ואז רשומות מופרדות על ידי שורות ריקות. מתי RS מוגדר למחרוזת null, התו החדשני תמיד פועל כמפריד שדה, בנוסף לכל ערך FS ייתכן שיש לי.

שדות

כמו כל רשומה קלט הוא קרא, גאווק מחלק את הרשומה שדות , תוך שימוש בערך של FS משתנה כמפריד השדה. אם FS הוא תו בודד, שדות מופרדים על ידי תו זה. אם FS הוא מחרוזת null, אז כל תו בודד הופך לשדה נפרד. אחרת, FS צפוי להיות ביטוי רגיל. במקרה מיוחד זה FS הוא מרחב אחד, שדות מופרדים על ידי ריצות של רווחים ו / או כרטיסיות ו / או שורות חדשות. (אבל ראה את הדיון --posix, להלן). הערה: הערך של IGNORECASE (ראה להלן) משפיע גם על אופן פיצול השדות כאשר FS הוא ביטוי רגיל, וכיצד מופרדים רשומות כאשר RS הוא ביטוי רגיל.

אם תחומים משתנה מוגדר לרשימת המספרים המופרדים בין המספרים, כל שדה צפוי להיות בעל רוחב קבוע גאווק מפצל את הרשומה באמצעות רוחב שצוין. הערך של FS הוא התעלם. הקצאת ערך חדש ל FS עוקף את השימוש תחומים, ומשחזר את התנהגות ברירת המחדל.

כל שדה ברשומה הקלט יכול להיות הפניה על ידי עמדתה, $1, $2, וכן הלאה. $0 הוא שיא שלם. שדות לא צריך להיות הפניה על ידי קבועים:

n = 5- $ n

מדפיס את השדה החמישי ברשומת הקלט.

המשתנה NF מוגדר למספר השדות הכולל ברשומת הקלט.

הפניות לשדות שאינם קיימים (כלומר שדות לאחר $ NF) לייצר את החוט null. עם זאת, הקצאה לשדה שאינו קיים (למשל, $ (NF + 2) = 5) מגדילה את הערך של NF, יוצר כל שדות מתערבים עם מחרוזת null כערך שלהם, וגורם לערך של $0 להיות recomputed, עם שדות מופרדים על ידי הערך של OFS. הפניות לשדות ממוספרים שליליים גורמים לשגיאה חמורה. צמצום NF גורם לערכים של שדות מעבר הערך החדש לאיבוד, ואת הערך של $0 להיות recomputed, עם שדות מופרדים על ידי הערך של OFS.

הקצאת ערך לשדה קיים גורמת להקלטת כל הרשומה $0 הוא הפניה. באופן דומה, הקצאת ערך ל $0 גורם לרשומה להיות resplit, יצירת ערכים חדשים עבור השדות.

מובנים מובנים

Gawk המשתנים המובנים הם:

ARGC

מספר הארגומנטים של שורת הפקודה (אינו כולל אפשרויות גאווק , או מקור התוכנית).

ARGIND

המדד ב ARGV של הקובץ הנוכחי המעובד.

ARGV

מערך טיעונים של שורת הפקודה. המערך הוא באינדקס מ -0 ל -0 ARGC - 1. שינוי דינמי של התוכן של ARGV יכול לשלוט על הקבצים המשמשים לנתונים.

BINMODE

במערכות שאינן POSIX, מציין שימוש במצב 'בינארי' עבור כל קובץ קלט / פלט. ערכים מספריים של 1, 2 או 3 מציינים שקובצי קלט, קובצי פלט או כל הקבצים, בהתאמה, צריכים להשתמש בינארי I / O. ערכי מחרוזת של "R", או "w" ציין שקובצי קלט, או קובצי פלט, בהתאמה, צריכים להשתמש בינארי I / O. ערכי מחרוזת של "rw" או "wr" ציין כי כל הקבצים צריכים להשתמש בינארי I / O. כל ערך מחרוזת אחר מטופל כ "rw", אך יוצרת הודעת אזהרה.

קונבנקט

פורמט ההמרה של מספרים, "% .6g", כברירת מחדל.

אנוירון

מערך המכיל את ערכי הסביבה הנוכחית. המערך מסודר על ידי משתני הסביבה, כאשר כל אלמנט הוא הערך של אותו משתנה (למשל,ENVIRON "HOME" עשוי להיות / home / arnold). שינוי מערך זה אינו משפיע על הסביבה הנראית על ידי תוכניות אשר גאווק spawns באמצעות ניתוב מחדש או מערכת()פונקציה.

ERRNO

אם מתרחשת שגיאת מערכת או לבצע ניתוב מחדש עבור getline, במהלך קריאה עבור getline, או במהלך סגור (), לאחר מכן ERRNO יכיל מחרוזת המתארת ​​את השגיאה. הערך כפוף לתרגום בשפות שאינן אנגלית.

תחומים

רשימה נפרדת של שדות רוחב פס. כאשר מוגדר, גאווק מנתח את הקלט לשדות של רוחב קבוע, במקום להשתמש בערך של FS משתנה כמפריד השדה.

שם קובץ

שם קובץ הקלט הנוכחי.אם לא צוינו קבצים בשורת הפקודה, הערך של שם קובץ הוא `` - ''. למרות זאת, שם קובץ אינו מוגדר בתוך התחל בלוק (אלא אם כן נקבע על ידי getline).

FNR

מספר רשומת הקלט בקובץ הקלט הנוכחי.

FS

מפריד שדה הקלט, רווח כברירת מחדל. ראה שדות, לעיל.

IGNORECASE

שולט ברגישות למקרה של כל ביטוי רגיל ופעולות מחרוזת. אם IGNORECASE יש ערך אפס, ואז השוואות מחרוזת התאמת דפוס בכללים, פיצול השדה עם FS, ההקלטה עם RS, ביטוי רגיל תואם עם ~ו !~, וה gensub (), gsub (), אינדקס(), התאמה(), פיצול (), ו :05 () מובנה פונקציות כל להתעלם במקרה בעת ביצוע פעולות ביטוי רגיל. הערה: מחרוזת מערך הוא לא מושפע, וגם לא סוג של() פונקציה.

לכן, אם IGNORECASE אינו שווה לאפס, / aB / תואם את כל המיתרים report Ab, "aB","Ab", ו "AB". כמו עם כל המשתנים AWK, הערך ההתחלתי של IGNORECASE הוא אפס, ולכן כל ביטוי רגיל פעולות מחרוזת הם רגישים במקרה. תחת Unix, כל ערכת התווים הלטינית 1 ISO 8859-1 משמשת בעת התעלמות מהמקרה.

LINT

מספק שליטה דינמית של --lint אפשרות מתוך תוכנית AWK. כאשר נכון, גאווק מדפיס אזהרות מוך. כאשר שקר, זה לא. בעת הקצאת ערך המחרוזת "קטלני", אזהרות מוך הופכות לשגיאות קטלניות, בדיוק כמו - לינט = קטלני. כל ערך אחר פשוט מדפיס אזהרות.

NF

מספר השדות ברשומה הנוכחית.

NR

המספר הכולל של רשומות קלט שנצפו עד כה.

OFMT

פורמט פלט עבור מספרים, "% .6g", כברירת מחדל.

OFS

מפריד שדה הפלט, רווח כברירת מחדל.

ORS

הפלט להקליט את הפלט, כברירת מחדל קו חדש.

PROCINFO

האלמנטים של מערך זה מספקים גישה למידע אודות תוכנית AWK הפועלת. במערכות מסוימות, עשויים להיות אלמנטים במערך, "קבוצה 1" דרך "קבוצה n ' עבור חלק n , שהוא מספר הקבוצות המשלימות שיש לתהליך. להשתמש ב in מפעיל לבדוק את האלמנטים האלה. האלמנטים הבאים מובטחים להיות זמינים:

PROCINFO "egid"

הערך של getegid (2) שיחת המערכת.

PROCINFO "euid"

הערך של geteuid (2) שיחת המערכת.

PROCINFO "FS"

"FS" אם שדה פיצול עם FS הוא למעשה, או "FIELDWIDTHS" אם שדה פיצול עם תחומים הוא למעשה.

PROCINFO "gid"

הערך של getgid (2) שיחת המערכת.

PROCINFO "pgrpid"

מזהה קבוצת התהליך של התהליך הנוכחי.

PROCINFO "pid"

את מזהה התהליך של התהליך הנוכחי.

PROCINFO "ppid"

את תהליך ההורה מזהה של התהליך הנוכחי.

PROCINFO "uid"

הערך של getuid (2) שיחת המערכת.

RS

מפריד הרשומה הקלט, כברירת מחדל קו חדש.

RT

הרשומה. Gawk סטים RT לטקסט הקלט התואם את התו או הביטוי הרגיל שצוין על ידי RS.

RSTART

המדד של התו הראשון תואם התאמה(); 0 אם אין התאמה. (משמעות הדבר היא כי מדדי אופי להתחיל באחת.)

RLENGTH

אורך המחרוזת תואמת התאמה(); -1 אם אין התאמה.

SUBSEP

הדמות המשמשת להפריד בין מספר תחתיבים באלמנטים במערך, כברירת מחדל ' 034'.

TEXTDOMAIN

תחום הטקסט של תוכנית AWK; השתמש כדי למצוא את התרגומים המקוונים עבור string's string.

מערכים

מערכים מודפסים עם ביטוי בין סוגריים מרובעים ( ו ). אם הביטוי הוא רשימת ביטוי ( expr , expr …) אז את מערך subscript הוא מחרוזת המורכבת של שרשור של (מחרוזת) ערך של כל ביטוי, מופרדים על ידי הערך של SUBSEP משתנה. מתקן זה משמש כדי לדמות מערכים ממדים כפול. לדוגמה:

i = "A"; j = "B"; k = "C"x i, j, k = "שלום, עולם n"

מקצה את המחרוזת "שלום, עולם n" אל אלמנט המערך איקס אשר צמודה על ידי מחרוזת"A 034B 034C". כל המערכים ב- AWK הם אסוציאטיביים, כלומר, על ידי ערכי מחרוזת.

מפעיל מיוחד in ניתן להשתמש ב אם או בזמן הצהרה כדי לראות אם למערך יש אינדקס המורכב מערך מסוים.

אם (val מערך) מערך הדפסה val

אם למערך יש מספר תחתיבים, השתמש (i, j) במערך.

ה in מבנה עשוי לשמש גם ב ל לולאה כדי לחזור על כל האלמנטים של מערך.

אלמנט עשוי להימחק ממערך באמצעות למחוק הצהרה. ה למחוק ניתן להשתמש בהצהרה גם כדי למחוק את כל התוכן של מערך, רק על ידי ציון שם המערך ללא מחרוזת.

משתנה הקלדה המרה

משתנים ושדות עשויים להיות (מספרים נקודה), או מחרוזות, או שניהם. כיצד מתפרשת ערכו של משתנה משתנה בהקשר שלו. אם משתמשים בביטוי מספרי, הוא יטופל כמספר, אם משתמשים בו כמחרוזת, יטופל כמחרוזת.

כדי לאלץ משתנה להיות מטופל כמספר, הוסף 0 אליו; כדי לאלץ אותו להיות מטופל כמחרוזת, לשרשר אותו עם מחרוזת null.

כאשר מחרוזת חייבת להיות מומרת למספר, ההמרה מתבצעת באמצעות strtod (3). מספר מומרת למחרוזת באמצעות הערך של קונבנקט כמחרוזת פורמט עבור ספרינטף (3), עם הערך המספרי של המשתנה כארגומנט. עם זאת, למרות שכל המספרים ב- AWK הם נקודה צפה, ערכים אינטגרליים הם תמיד להמיר כמו מספרים שלמים. לפיכך, נתון

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

המשתנה יש ערך מחרוזת של '12' ולא '12.00'.

Gawk מבצעת השוואות כדלקמן: אם שני משתנים מספריים, הם משווים באופן מספרי. אם ערך אחד הוא מספרי והשני בעל ערך מחרוזת שהוא מחרוזת מספריים, אזי גם השוואות נעשות באופן מספרי. אחרת, הערך המספרי יומר למחרוזת ויבוצע השוואת מחרוזות. שתי מחרוזות מושוות, כמובן, כמחרוזות. שים לב כי תקן POSIX מיישם את המושג "מחרוזת מספריים" בכל מקום, אפילו לקביעות מחרוזות. עם זאת, זה לא נכון בבירור, ו גאווק לא עושה את זה. (למרבה המזל, זה קבוע בגירסה הבאה של התקן.)

שים לב כי מחרוזות מחרוזות, כגון '57', הם לא מחרוזות מספריות, הן קבועות מחרוזת. הרעיון של 'מחרוזת מספריים' 'חל רק על שדות, getline קלט, שם קובץ, ARGV אלמנטים, אנוירון אלמנטים של אלמנטים של מערך שנוצר על ידי פיצול () כי הם מחרוזות מספריים. הרעיון הבסיסי הוא זה קלט משתמש , ורק קלט המשתמש, זה נראה מספרי, צריך להתייחס ככה.

למשתנים לא מסודרים יש את הערך המספרי 0 ואת ערך המחרוזת "" (null, או ריק, string).

אוקטלים והקסדצימליים

החל מגרסה 3.1 של gawk, אתה יכול להשתמש בסגנון C אוקטלי ו הקסדצימלי קבועים בקוד המקור התוכנית AWK שלך. לדוגמה, הערך אוקטלי 011 שווה לעשרונית 9, ואת הערך הקסדצימלי 0x11 שווה לעשרונית 17.

מחרוזות מיתרים

מחרוזות מחרוזות ב- AWK הן רצפים של תווים סגורים בין מרכאות כפולות ('). בתוך מיתרים, מסוימים רצפי מילוט מוכרים, כמו ב C. אלה הם:

\

ריקבון מילולי.

a

הדמות '' התראה ''; בדרך כלל את אופי ASCII BEL.

b

f

טופס להאכיל.

n

שורה חדשה.

r

לחזור המרכבה.

t

הכרטיסייה האופקית.

v

הכרטיסייה אנכית.

איקס ספרות hex

הדמות המיוצגת על ידי מחרוזת ספרות הקסדצימליות לאחר איקס. כמו ב- ANSIC, כל הספרות הקסדצימליות הבאות נחשבות לחלק מרצף הבריחה. (תכונה זו אמורה לספר לנו משהו על עיצוב שפה על ידי הוועדה.) למשל, " x1B" הוא תו ASCIIESC (בריחה).

ddd

התו המיוצג על ידי רצף 1-, 2, או 3 ספרות של ספרות אוקטליות. לדוגמה, ' 033' הוא תו ASCII ESC (בריחה).

c

הדמות המילולית c .

רצפי הבריחה עשויים לשמש גם בביטויים קבועים קבועים (למשל,/ t f n r v / תואם תווים לבנים).

במצב תאימות, התווים המיוצגים על ידי רצפים בריחה אוקטלית והקסדצימלית מטופלים, פשוטו כמשמעו, כאשר משתמשים קבועים ביטוי קבוע. לפיכך, / a 52b / שווה ל/ a * b /.

דפוסי פעולה

AWK היא שפה מוכוונת שורה. הדפוס מגיע קודם, ואז הפעולה. הצהרות פעולה מצורפות { ו }. ייתכן שהתבנית חסרה, או שהפעולה עלולה להיות חסרה, אבל, כמובן, לא את שניהם. אם התבנית חסרה, הפעולה מבוצעת עבור כל רשומה יחידה של קלט. פעולה חסרה שווה ל

{ הדפס }

אשר מדפיס את הרשומה כולה.

ההערות מתחילות עם תו '#' ', וממשיכות עד סוף השורה. ניתן להשתמש בקווים ריקים להפריד בין ההצהרות. בדרך כלל, הצהרה מסתיימת עם שורה חדשה, עם זאת, זה לא המקרה של השורות מסתיימת ב ',' ', {, ?, :, &&, או ||. קווים המסתיימים ב לעשות או Other יש גם את ההצהרות שלהם באופן אוטומטי המשיך על הקו הבא. במקרים אחרים, ניתן להמשיך בשורה על ידי סיומה ב - ', ובמקרה זה תתעלם מהקו החדש.

ניתן להוסיף מספר משפטים בשורה אחת על-ידי הפרדתם ל- ``; ''. זה חל הן על הצהרות בתוך חלק הפעולה של זוג דפוס פעולה (המקרה הרגיל), וכן את דפוס פעולה הצהרות עצמם.

דפוסי

דגמי AWK עשויים להיות אחד מהבאים:

התחל סוף / הבעה רגילה / ביטוי רציונלי דפוס && דפוס דפוס || דפוס דפוס ? דפוס : דפוס ( דפוס ) ! דפוס style/ , דפוס

התחל ו סוף הם שני סוגים מיוחדים של דפוסים שאינם נבדקים כנגד הקלט. חלקי הפעולה של כל התחל דפוסי מתמזגים כאילו כל ההצהרות נכתבו באחד התחל בלוק. הם להורג לפני כל קלט הוא קרא. באופן דומה, כל סוף בלוקים ממוזגים, ומבוצע כאשר כל קלט הוא מותש (או כאשר יציאה הצהרה מתבצע). התחל ו סוף לא ניתן לשלב דפוסים עם דפוסים אחרים בביטויי דפוס. התחל ו סוף דפוסי לא יכול להיות חלקי פעולה חסרים.

ל / הבעה רגילה / תבניות, ההצהרה המשויכת מתבצעת עבור כל רשומת קלט המתאימה לביטוי הרגיל. ביטויים רגולריים זהים לאלה שבביטויים agrep (1), ומסוכמים להלן.

א ביטוי רציונלי רשאי להשתמש בכל אחד מהמפעילים המוגדרים להלן בסעיף הפעולות. אלה בודקים בדרך כלל אם שדות מסוימים תואמים ביטויים רגולריים מסוימים.

ה &&, ||, ו ! המפעילים הם לוגיים, לוגיים או, ולא הגיוני לא, בהתאמה, כמו ב C. הם עושים הערכה במעגל קצר, כמו גם ב C, ומשמשים שילוב של ביטויים דפוס פרימיטיבי יותר. כמו ברוב השפות, ניתן להשתמש בסוגריים כדי לשנות את סדר ההערכה.

ה ?: המפעיל הוא כמו מפעיל אותו C. אם הדפוס הראשון נכון אז דפוס המשמש לבדיקה הוא דפוס השני, אחרת זה השלישי. רק אחד הדפוסים השני והשלישי מוערך.

ה style/ , דפוס צורת הביטוי נקראת א דפוס טווח . זה תואם את כל רשומות קלט מתחיל עם הרשומה התואמת style/ , ולהמשיך עד שיא שמתאים דפוס , כולל. זה לא לשלב עם כל סוג אחר של ביטוי דפוס.

ביטויים רגולריים

ביטויים רגולריים הם סוג המורחב שנמצא agrep . הם מורכבים דמויות כדלקמן:

c

תואם את metacharacter הלא c .

c

תואם את אופי מילולי c .

.

תואם לכל תו כולל שורה חדשה.

^

תואם את תחילתה של מחרוזת.

$

תואם לקצה המחרוזת.

א ב ג…

רשימת תווים, מתאים לכל אחת מהתווים א ב ג… .

^ א ב ג…

רשימת תווים מנוטרלת, תואמת כל תו למעט א ב ג… .

r1 | r2

בחירה: התאמות r1 או r2 .

r1r2

שרשור: התאמות r1 , ואז r2 .

ייצור +

תואם אחד או יותר ייצור 's.

ייצור *

תואם לאפס או יותר ייצור 's.

ייצור ?

תואם אפס או אחד ייצור 's.

( ייצור )

קיבוץ: התאמות ייצור .

ייצור { n }

ייצור { n ,}

ייצור { n , M } אחד או שניים מספרים בתוך הפלטה מציינים הביטוי המרווח . אם יש מספר אחד בסוגריים, הביטוי הרגיל הקודם ייצור חוזר n פעמים. אם קיימים שני מספרים המופרדים באמצעות פסיק, ייצור חוזר n ל M פעמים. אם יש מספר אחד ואחריו פסיק, לאחר מכן ייצור הוא חזר לפחות n פעמים.

ביטויים של מרווח זמינים רק אם --posix או - מרווח זמן צוין בשורת הפקודה.

y

תואם את המחרוזת הריקה בהתחלה או בקצה של מילה.

B

תואם את המחרוזת הריקה בתוך מילה.

<

תואם את המחרוזת הריקה בתחילת המילה.

>

תואם את המחרוזת הריקה בסוף מילה.

w

מתאים לכל תו מכונן-מילה (אות, ספרה או קו תחתון).

W

תואם כל תו שאינו מילה מכוננת.

`

תואם את המחרוזת הריקה בתחילת מאגר (מחרוזת).

'

תואם את מחרוזת ריקה בסוף חיץ.

רצפי בריחה תקפים קבועים מחרוזת (ראה להלן) תקפים גם ביטויים רגולריים.

כיתות תווים הם תכונה חדשה שהוכנסה בתקן POSIX. מחלקה של תו היא ציון מיוחד לתיאור רשימות תווים בעלות תכונה ספציפית, אך כאשר התווים עצמם יכולים להשתנות ממדינה למדינה ו / או מתווים שהוגדרו לערכת תווים. לדוגמה, הרעיון של אופי אלפביתי שונה בארה"ב ובצרפת.

מחלקת תווים תקפה רק בביטוי רגיל בפנים בסוגריים של רשימת תווים. כיתות אופי מורכבות :, מילת מפתח המציינת את הכיתה, וכן :. שיעורי התווים המוגדרים על ידי תקן POSIX הם:

: alnum:

אותיות אלפא - נומריות.

: אלפא:

תווים אלפביתיים.

: ריק:

תווי רווח או כרטיסייה.

: cntrl:

שליטה בתווים.

: digit:

תווים מספריים.

: גרף:

תווים שניתן להדפיסם ולגלויות. (חלל ניתן להדפסה, אך אינו גלוי, בעוד a א הוא גם וגם.)

:נמוך יותר:

אותיות קטנות באותיות קטנות.

:הדפס:

תווים הניתנים להדפסה (תווים שאינם תווי שליטה).

: punct:

סימני פיסוק (תווים שאינם אות, ספרות, תווים בקרה או תווים בחלל).

: Space:

תווי רווח (כגון רווח, כרטיסייה, ו formfeed, עד כמה שם).

: עליון:

תווים אלפביתיים בעלי אותיות גדולות.

: xdigit:

תווים שהם ספרות הקסדצימליות.

לדוגמה, לפני תקן POSIX, כדי להתאים תווים אלפאנומריים, היית צריך לכתוב / A-Za-z0-9 /. אם ערכת התווים שלך מכילה תווים אלפביתיים אחרים, זה לא מתאים להם, ואם ערכת התווים שלך נאספה באופן שונה מ- ASCII, ייתכן שהדבר לא יתאים אפילו לתווים האלפאנומריים של ASCII. עם כיתות אופי POSIX, אתה יכול לכתוב/ : alnum: /, וזה תואם את התווים אלפביתית ומספרי להגדיר את התווים.

שני רצפים מיוחדים נוספים יכולים להופיע ברשימות תווים. אלה חלים על ערכות תווים שאינן ASCII, אשר יכול להיות סמלים בודדים (נקרא אלמנטים ) המיוצגים עם יותר מ תו אחד, כמו גם מספר תווים שהם שווים עבור איסוף , או מיון, מטרות. (למשל, בצרפתית, מישור "e" "ומבטא חמור e` שווים).

איסוף סמלים

סמל קולטינג הוא אלמנט רב-תכליתי המאגד בתוכו . ו .. לדוגמה, אם ch הוא אלמנט איסוף .ch. הוא ביטוי קבוע התואם אלמנט זה collating, בעוד ch הוא ביטוי רגיל שמתאים c או ח.

כיתות שוויון

מחלקה שקילות היא שם ספציפי לאזור עבור רשימה של תווים שהם שווים. השם מוקף = ו =. לדוגמה, השם ה יכול לשמש כדי לייצג את כל "e", "e", "" ו "` `." במקרה זה, = = e = הוא ביטוי רגיל שמתאים לכל אחד ה, e, או e`.

תכונות אלה הם בעלי ערך רב באזורים שאינם דוברי אנגלית. הספריה מתפקדת כך גאווק משתמש עבור ביטוי ביטוי רגיל כרגע רק לזהות POSIX אופי הכיתות; הם אינם מזהים סמלי איסוף או שיעורים שקולים.

ה y, B, <, >, w, W, `, ו ' אופרטורים ספציפיים גאווק ; הם תוספים המבוססים על מתקנים בספריות הביטוי הרגולרי של גנו.

אפשרויות שורת הפקודה השונות קובעות כיצד גאווק מפרש תווים בביטויים רגילים.

אין אפשרויות

במקרה ברירת המחדל, גאווק לספק את כל המתקנים של ביטויים רגולריים POSIX והמפעילים ביטוי רגיל GGU שתואר לעיל. עם זאת, ביטויים המרווחים אינם נתמכים.

--posix

רק ביטויים רגולריים POSIX נתמכים, אופרטורי GNU אינם מיוחדים. (למשל, w תואם למילולי w). ניתן להשתמש בביטויים המרווחים.

- מסורתי

יוניקס מסורתית אוק ביטויים רגולריים מתאימים. אופרטורי GNU אינם מיוחדים, ביטויים של אינטרוולים אינם זמינים, וגם לא כיתות התווים POSIX (: alnum: וכן הלאה). תווים המתוארים על ידי רצפים בריחה אוקטלית והקסדצימלית מטופלים ממש, גם אם הם מייצגים מטא-תווים של הביטוי הרגיל.

- מרווח זמן

אפשר ביטויי הפרעות בביטויים רגילים, גם אם - מסורתי כבר מסופק.

פעולות

הצהרות פעולה סגורות בסוגריים, { ו }. הצהרות פעולה מורכבות מההצהרות הרגילות, ההצהרות המותנות והלולאות הנמצאות ברוב השפות. המפעילים, הצהרות הבקרה והודעות הקלט / פלט זמינות בדוגמאות לאחר האותיות של C.

אופרטורים

המפעילים ב AWK, לפי סדר הפחתת עדיפות, הם

()

קיבוץ

$

התייחסות שדה.

++ --

הגדלה וצמצום, הן קידומת והן Postfix.

^

אקספוננציאציה (** עשוי לשמש גם, ו **= עבור מפעיל ההקצאה).

+ - !

Unary פלוס, unary מינוס, ושלילה לוגית.

* / %

כפל, חלוקה ומודולוס.

+ -

חיבור וחיסור.

חלל

שרשור מחברים.

< >

<= >=

!= == מפעילי הקשר הרגילים.

~ !~

התאמה לביטוי רגיל, התאמה שלילית. הערה: אל תשתמש בביטוי קבוע קבוע (/ foo /) בצד שמאל של א ~ או !~. השתמש רק בצד ימין. הביטוי / foo / ~ exp יש את אותה משמעות כמו ($ 0 ~ / foo /) ~ exp ). זה בדרך כלל לא מה נועד.

in

חברות במערך.

&&

לוגי ו.

||

לוג לוגי.

?:

הביטוי C מותנה. זה יש את הטופס expr1 ? expr2 : expr3 . אם expr1 נכון, הערך של הביטוי הוא expr2 , אחרת זה expr3 . רק אחד expr2 ו expr3 מוערכת.

= += -=

*= /= %= ^= הקצאה. הן הקצאה מוחלטת ( var = ערך ) ואת הקצאת מפעיל (צורות אחרות) נתמכים.

דוחות בקרה

דוחות הבקרה הינם כדלקמן:

אם ( תנאי ) הצהרה Other הצהרה בזמן ( תנאי ) הצהרה לעשות הצהרה בזמן ( תנאי ) ל ( expr1 ; expr2 ; expr3 ) הצהרה ל ( var in מערך ) הצהרה לשבור להמשיך למחוק מערך אינדקס למחוק מערך יציאה ביטוי { הצהרות }

I / O דוחות

דוחות הקלט / פלט הם כדלקמן:

סגור קובץ , איך )

סגור קובץ, צינור או תהליך משותף. אופציונלי איך יש להשתמש רק כאשר סוגרים קצה אחד של צינור דו-כיווני לתהליך משותף. זה חייב להיות ערך מחרוזת, או "ל" או "מ".

getline

הגדר $0 מרשומת הקלט הבאה; בחר NF, NR, FNR.

getline < קובץ

הגדר $0 מהרשומה הבאה של קובץ ; בחר NF.

getline var

הגדר var מרשומת הקלט הבאה; בחר NR, FNR.

getline var < קובץ

הגדר var מהרשומה הבאה של קובץ .

פקודה | getline var

הפעלה פקודה צנרת הפלט או לתוך $0 או var , כאמור לעיל.

פקודה ואנחנו 49 var

הפעלה פקודה כמו שיתוף בתהליך צנרת פלט או לתוך $0 או var , כאמור לעיל. שיתוף תהליכים הם גאווק סיומת.

הבא

הפסק לעבד את רשומת הקלט הנוכחית. רשומת הקלט הבאה נקראת ועיבוד מתחיל עם הדפוס הראשון בתוכנית AWK. אם סוף הנתונים קלט הוא הגיע, את סוף בלוקים (s), אם בכלל, מבוצעים.

הבא

הפסק את עיבוד קובץ הקלט הנוכחי. רשומת הקלט הבאה נקראת מתוך קובץ הקלט הבא. שם קובץ ו ARGIND מעודכנים, FNR הוא לאפס ל 1, ועיבוד מתחיל עם הדפוס הראשון בתוכנית AWK. אם סוף הנתונים קלט הוא הגיע, את סוף בלוקים (s), אם בכלל, מבוצעים.

הדפס

מדפיס את הרשומה הנוכחית. רשומת הפלט מסתיימת עם הערך של ORS משתנה.

הדפס expr-list

מדפיס ביטויים. כל ביטוי מופרד על ידי הערך של OFS משתנה. רשומת הפלט מסתיימת עם הערך של ORS משתנה.

הדפס expr-list > קובץ

הדפסת ביטויים ב קובץ . כל ביטוי מופרד על ידי הערך של OFS משתנה. רשומת הפלט מסתיימת עם הערך של ORS משתנה.

הדפס fmt, expr-list

פורמט והדפס.

הדפס fmt, expr-list > קובץ

פורמט והדפס ב קובץ .

מערכת( cmd-line )

בצע את הפקודה cmd-line , ולהחזיר את מצב היציאה. (ייתכן שהדבר אינו זמין במערכות שאינן POSIX).

fflush ( קובץ )

שטוף את כל המאגרים המשויכים לקובץ הפלט הפתוח או לצינור קובץ . אם קובץ חסר, אז פלט סטנדרטי הוא הסמיק. אם קובץ הוא מחרוזת ריק, ואז כל קבצי הפלט הפתוח צינורות יש המאגרים שלהם הסמיק.

ניתנים הפניות נוספות של פלט עבור הדפס ו הדפס.

הדפס … >> קובץ

מוסיף פלט אל קובץ .

הדפס … | פקודה

כותב על צינור.

הדפס … | פקודה

שולח נתונים לתהליך משותף.

ה getline הפקודה מחזירה 0 בסוף הקובץ ו- -1 על שגיאה. עם שגיאה, ERRNO מכיל מחרוזת המתארת ​​את הבעיה.

הערה: אם אתה משתמש בצינור או בתהליך משותף getline, או מ הדפס או הדפס בתוך לולאה, אתה צריך להשתמש סגור () ליצור מופעים חדשים של הפקודה. AWK אינו סוגר אוטומטית צינורות או משתף פעולה כאשר הם מחזירים את EOF.

הצהרת ה - printf

גרסאות AWK של הדפס הצהרה ו sprintf () (ראה להלן) מקבלים את הפורמטים הבאים של מפרט המרה:

% c

תו ASCII. אם הארגומנט שימש % c הוא מספרי, הוא מטופל כמו דמות מודפס. אחרת, הטענה מניחה שהיא מחרוזת, והדפוס הראשון היחיד של מחרוזת זו מודפס.

% d, %אני

מספר עשרוני (החלק השלם).

% e,% E

מספר נקודה צפה של הטופס - d.dddddde + - dd. ה % E פורמט ה במקום ה.

% f

מספר נקודה צפה של הטופס - ddd.dddddd.

% g,% G

להשתמש % ה או % f המרה, הקצר מביניהם, עם אפסים לא משמעותיים מדוכאים. ה% G פורמט % E במקום % ה.

% o

מספר אוקטלי לא חתום (גם מספר שלם).

% u מספר עשרוני לא חתום (שוב, מספר שלם).

% s

מחרוזת תווים.

% x,% X

מספר הקסדצימלי לא חתום (מספר שלם). ה %איקס פורמט א ב ג ד ה ו במקוםא ב ג ד ה ו.

%%

בודד % אופי; לא מתווכחים שום ארגומנטים.

הפרמטרים האופציונליים, נוספים, עשויים להימצא בין % ואת מכתב הבקרה:

לספור $

להשתמש ב לספור 'ארגומנט בשלב זה בתבנית. זה נקרא א מציין נקודה והוא מיועד בעיקר לשימוש בגירסאות מתורגמות של מחרוזות פורמט, לא בטקסט המקורי של תוכנית AWK. זה גאווק סיומת.

-

הביטוי צריך להיות מוצדק בתחומו.

חלל

להמרות מספריות, הקדם ערכים חיוביים עם רווח וערכים שליליים עם סימן מינוס.

+

סימן החיבור, המשמש לפני שינוי רוחב (ראה למטה), אומר תמיד לספק סימן להמרות מספריות, גם אם הנתונים להיות מעוצב חיובי. ה + עוקפת את תכונת החלל.

#

השתמש בטופס "חלופי" עבור אותיות בקרה מסוימות. ל % o, לספק אפס מוביל. ל %איקס, ו %איקס, לספק מוביל 0x או 0X עבור תוצאה לא. ל % ה, % E, ו % f, התוצאה תמיד מכילה נקודה עשרונית. ל % g, ו % G, אפסים נגרר לא יוסרו מהתוצאה.

0

הובלה 0 (אפס) משמש דגל, המציין פלט צריך להיות מרופד עם אפסים במקום רווחים. זה חל גם על פורמטים פלט לא מספריים. לדגל זה יש רק