AWK

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש
AWK
פרדיגמות שפת תסריט, תכנות פרוצדורלי
שנה 1977
מתכנן אלפרד אהו, פיטר וינברגר, ובריאן קרניהן
מימושים awk, GNU Awk, mawk, nawk, MKS AWK
ניבים oawk, nawk, gawk
הושפעה על ידי C,‏ Bourne Shell
השפיעה על TCL, Perl, Lua

AWK היא שפת תכנות מפורשת המיועדת לעיבוד טקסט ומשמשת בדרך כלל ככלי לחילוץ מידע. השפה מהווה סטנדרט במערכות הפעלה דמויות יוניקס, והפכה פופולרית מאוד בשלהי שנות ה-70 וה-80.

AWK נכתבה במעבדות בל בשנת 1977.[1] שמה לקוח משמות המשפחה של שלושת מפתחיה - אלפרד אהו, פיטר וינברגר, ובריאן קרניהן. שם השפה נשמע גם כמו עוף האלקה באנגלית (auk), אשר מופיע על כריכת הספר הרשמי של השפה.[2]

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

היסטוריה

awk היה אחד מהכלים הראשונים שהופיעו בגרסה 7 של מערכת ההפעלה יוניקס. הוא הוסיף תכונות חישוביות לשימוש במעטפת של יוניקס וזכה לפופולריות כיוון שמלבד Bourne Shell היה לשפת התסריט היחידה בסביבת UNIX הסטנדרטית. כיום awk מהווה רכיב חובה במערכות יוניקס[4], ובכל הפצת לינוקס.[5]

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

AWK ראתה לראשונה אור בשנת 1977, אך תוקננה והורחבה משמעותית בשנים 1985-1988, כאשר יצאו nawk‏ ("New AWK") ו-gawk‏ ("GNU AWK"). במקביל פותחה Perl וראתה אור בשנת 1987, ובשנות ה-90 החלה להחליף את AWK בנישת עיבוד הטקסט בסביבת יוניקס.

תחביר

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

הצהרה בשפה נראית כך:

condition { action }

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

בשפה קיימים מספר משתנים מובנים בשפה, אשר ניתן להשתמש בהם בתנאי או בפעולה. לדוגמה, השדות ברשומה ישמרו במשתנים $1, $2, $3 וכדומה, כאשר $0 יציין את הרשומה כולה. ניתן למנות משתני סביבה נוספים כגון NR ו-NF, אשר מכילים את מספר הרשומות ומספר השדות ברשומה בהתאמה.

Hello World

תוכנית פשוטה זו ,תדפיס את המחרוזת "Hello, World!" לפלט הסטנדרטי:

BEGIN { print "Hello, world!" }

ראו גם

קישורים חיצוניים

הערות שוליים