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

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

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

היסטוריה
--------

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

ל-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!" }

```

ראו גם
------

* sed
* Bourne Shell

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

ויקישיתוף מדיה וקבצים בנושא **AWK** בוויקישיתוף
* The GNU Awk User’s Guide באתר פרויקט GNU

הערות שוליים
------------

1. ↑  The awk Programming Language, באתר אוניברסיטת מישיגן.
2. ↑  The AWK Programming Language, באתר מעבדות בל.
3. ↑  Applying Minilanguages, Case Study: awk, באתר FAQ.org.
4. ↑  Utilities Interface Table באתר unix.org‏, 30.1.2002.
5. ↑  Linux Standard Base Core Specification 4.1 באתר linuxfoundation.org‏, 16.2.2011.

| פקודות בסביבת Unix ובמערכות הפעלה דמויות יוניקס |
| --- |
| מערכת קבצים | 
bzip • cat • cd • chmod • chown • chgrp • cksum • cmp • cp • dd • du • df • file • fsck • gzip • ln • ls • mkdir • mount • mv • pwd • rm • rmdir • tar • tee •  tree • touch • umask • zip
 |
| תהליכים | 
at • chroot • cron • htop • kill • killall • nice • pgrep • pkill • ps • pstree • time • top
 |
| סביבת משתמש | 
dig • env • exit • finger • passwd • su • sudo • uptime • talk • uname • w • wall • who • whoami
 |
| עיבוד טקסט | 
awk • basename • cut • diff • ed • ex • head • less • more • paste • sed • sort • strings • tail • tr • uniq • vi • vim • wc • xargs
 |
| מעטפת | 
alias • echo • expr • printf • sleep • test • wait
 |
| רשת | 
ifconfig • inetd • ip • netcat • netstat • nload • nmap • nslookup • ping • rlogin • route • ssh • traceroute
 |
| חיפוש | 
find • grep • locate
 |
| שונות | 
man • bc • cal • date • parted • seq
 |

|  |  |
| --- | --- |
| בקרת זהויות עריכת הנתון בוויקינתונים | 
* NLI: 987007539008805171
* BnF: cb12302957w (data)
* GND: 4242961-4
* LCCN: sh87003812
* NKC: ph268180
* SUDOC: 031901646

 |