Awk: למידת סקריפטים של Shell באמצעות פקודת Terminal awk
הפקודה "awk" במערכות הפעלה חינמיות מסוג GNU / Linux היא פקודה חזקה מאוד, שעוזרת לנו להיות בעלי שליטה רבה יותר בעת עיבוד נתונים מפקודות או פקודות פקודה אחרות. השם AWK נגזר מראשי התיבות של שמות המשפחה של מחבריו: אלפרד Aהו, פיטר Wאיינברגר ובריאן Kארניגן.
פקודה זו מספקת שפת סקריפטים לעיבוד טקסט בה נוכל: להגדיר משתנים, להשתמש במחרוזות ובמפעילי חשבון, להשתמש בבקרת זרימה ובמחזורים וליצור דוחות מעוצבים. למעשה, Awk הוא לא רק פקודה לעיבוד תבניות, זו שפת ניתוח סמנטית שלמה.
מבוא לפקודת "awk"
AWK הייתה אחת מפעולות הקונסולה המאוד פופולריות לניהול (טיפול / חילוץ) של נתונים על ידי מקסימום הפונקציונליות של צינורות UNIX. השפה שמספקת כלי עזר זה היא כיום סטנדרט כמעט בכל מערכות ההפעלה המודרניות מסוג UNIX, עד כדי כך שהיא חלק מהמפרט הבסיסי של UNIX, כך שהיא בדרך כלל כבר מותקנת ברובם כברירת מחדל.
התחביר הנפוץ ביותר שלו הוא: קבצי 'תוכנית' awk ואיפה 'תוכנית' יכול להיות: תבנית {פעולה} תבנית {פעולה}. הפקודה קוראת את קלט הקובץ שורה אחת בכל פעם. משווים כל שורה לכל תבנית לפי הסדר; עבור כל תבנית שתואמת את השורה, מבוצעת הפעולה המתאימה.
דוגמה פשוטה כמו:
awk -F: '$1=="root" {print}' /etc/passwd
הוא שואל את השדה הראשון אם הוא שורש של כל שורה ב- / etc / passwd ומדפיס אותו בהתחשב ב- ":" עם -F: כמפריד שדות.
דוגמאות מעשיות
רשימת הפקודות הנפוצה ביותר
צפה ברשימה המבוססת על ההיסטוריה של מסוף המערכת שהוזמן מהמשתמש ביותר בתדירות נמוכה ביותר.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
לדוגמה:

גרף (טבלה) עם מספר חיבורים לכל מארח
צור גרף מבוסס טקסט ASCII המציג את מספר החיבורים הכולל מהמארח לכל כתובת IP.
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'
לדוגמה:

רשימת ספריות לפי גודל
הדפיסו על המסך את רשימת הספריות של הנתיב הנוכחי מהגדול לקטן ביותר המציג את התוויות המתאימות לגודלן בעזרת האותיות: g, m ו- k.
du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'
לדוגמה:

הראה תנועה מממשק רשת
צפה בצריכת נתונים נכנסת ויוצאת באופן מקוון בקילו-בתים (kb) עבור ממשק רשת שצוין.
while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done
לדוגמה:

השג סדרת מספרים
צור רשימת מספרים של כמות X לפי תבנית פיבונאטית בהתחשב בשני מספרי בסיס שייבנו.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
לדוגמה:

רישום גרפי של מבנה הקובץ לפי גודל
השג רשימה של כל התיקיות בשורש מערכת ההפעלה יחד עם הגרפיקה (הסורגים) והייצוג המספרי כאחוז מגודלם בתוכה.
t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'
לדוגמה:

רשום סיכום של סוגי קבצים בספריה
הראה רשימה של סוגי הקבצים הכלולים בספרייה יחד עם מספר הקבצים המתאימים לה.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
לדוגמה:

דוגמאות אלה לשורות פקודה המשתמשות בפקודה awk אני מקווה שתמצא אותה שימושית מאוד. והם משמשים לשימוש ישירות מהקונסולה או בעקיפין על ידי הכנסתם לתסריט (משימה אוטומטית).
בפוסט הבא על Shell Scripting נחקור פקודות אחרות.
אם אתה רוצה ללמוד קצת יותר על הפקודה "grep" בקר בקישור זה "ויקי DEBIAN"ואם אתה רוצה ללמוד עוד על Shell Scripting בבלוג שלנו, תוכלו להציץ בפרסומים האחרים שלנו בנושא, על ידי לחיצה כאן: סקריפטים ב- FromLinux
