פקודות, תחביר ודוגמאות
הפקודה awk היא שיטה רבת עוצמה לעיבוד או ניתוח קובצי טקסט - בפרט, קובצי נתונים המאורגנים על ידי שורות (שורות) ועמודות.
פקודות awk פשוטות ניתן להריץ משורת הפקודה . משימות מורכבות יותר צריך להיות כתוב כמו תוכניות awk (שנקרא סקריפטים awk) לקובץ.
הפורמט הבסיסי של פקודת awk נראה כך:
אופק 'תבנית {action}' קובץ קלט> קובץ פלטמשמעות הדבר היא: לקחת כל שורה של קובץ קלט; אם השורה מכילה את התבנית להחיל את הפעולה על הקו ולכתוב את הקו המתקבל על קובץ הפלט. אם התבנית מושמטת, הפעולה מוחלת על כל שורה. לדוגמה:
awk '{print $ 5}' table1.txt> output1.txtהצהרה זו לוקחת את האלמנט של העמודה החמישית של כל שורה וכותבת אותו בתור שורה בקובץ הפלט "output.txt". המשתנה '$ 4' מתייחס לעמודה השנייה. באופן דומה ניתן לגשת לעמודה הראשונה, השנייה והשלישית, עם $ 1, $ 2, $ 3, וכו '. כברירת מחדל, עמודות מניחות שהן מופרדות על ידי רווחים או טאבים (מה שנקרא חלל לבן). לכן, אם קובץ הקלט "table1.txt" מכיל שורות אלה:
1, ג 'סטין טימברלייק, כותרת 545, מחיר $ 7.30 2, טיילור סוויפט, כותרת 723, מחיר $ 7.90 3, מיק ג'אגר, כותרת 610, מחיר $ 7.90 4, ליידי גאגא, כותרת 118, מחיר $ 7.30 5, ג' וני קאש, כותרת 482, מחיר $ 6.50 6, אלביס פרסלי, כותרת 335, מחיר $ 7.30 7, ג 'ון לנון, כותרת 271, מחיר $ 7.90 8, מייקל ג' קסון, כותרת 373, מחיר $ 5.50לאחר מכן הפקודה תכתוב את השורות הבאות לקובץ הפלט "output1.txt":
545, 723, 610, 118, 482, 335, 271, 373,אם מפריד העמודות הוא משהו שאינו רווחים או כרטיסיות, כגון פסיק, באפשרותך לציין זאת בהצהרת ה- awk כדלקמן:
awk-F, '{print $ 3}' table1.txt> output1.txtפעולה זו תבחר את הרכיב מהעמודה 3 של כל שורה, אם העמודות יופרדו באמצעות פסיק. לכן הפלט, במקרה זה, יהיה:
כותרת 545 כותר 723 כותר 610 כותר 118 כותר 482 כותרת 335 כותר 271 כותר 373רשימת ההצהרות בתוך הסוגלים המסולסלים ('{{,'} ') נקראת בלוק. אם אתה שם ביטוי תנאי מול גוש, ההצהרה בתוך הבלוק תבוצע רק אם המצב נכון.
awk '$ 7 == "\ $ 7.30" {print $ 3}' table1.txtבמקרה זה, התנאי הוא $ 7 == "\ $ 7.30", כלומר האלמנט בעמודה 7 שווה ל 7.30 $. הקו האחורי מאחורי סימן הדולר משמש כדי למנוע מהמערכת לפרש $ 7 כמשתנה ובמקום זאת לקחת את סימן הדולר פשוטו כמשמעו.
אז זה הצהרה awk מדפיס את האלמנט בעמודה 3 של כל שורה שיש לו "$ 7.30" בעמודה 7.
ניתן גם להשתמש בביטויים רגילים כתנאי. לדוגמה:
awk '/ 30 / {print $ 3}' table1.txtהמחרוזת בין שני החרכים ('/') היא הביטוי הרגיל. במקרה זה, זה רק מחרוזת "30." משמעות הדבר היא שאם שורה מכילה את המחרוזת "30", המערכת מדפיסה את האלמנט בעמודה השלישית של הקו. הפלט בדוגמה לעיל יהיה:
טימברלייק, גאגא, פרסלי,אם אלמנטים בטבלה הם מספרים אווק יכול להפעיל חישובים עליהם כמו בדוגמה זו:
awk '{print ($ 2 * $ 3) + $ 7}'מלבד המשתנים שמקבלים אלמנטים של השורה הנוכחית ($ 1, $ 2, וכו ') ישנו המשתנה $ 0 המתייחס לשורה המלאה (שורה) ולמשתנה NF המחזיק במספר השדות.
ניתן גם להגדיר משתנים חדשים כמו בדוגמה זו:
awk '{sum = 0; עבור (col = 1; col <= NF; col ++) סכום + = $ col; סכום הדפסה; }זה מחשב ומדפיס את הסכום של כל האלמנטים של כל שורה.
הצהרות Awk משולבים לעתים קרובות עם פקודות sed .