Awk: למידת סקריפטים של Shell באמצעות פקודת Terminal awk

Awk: למידת סקריפטים של Shell באמצעות פקודת Terminal awk

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: כמפריד שדות.

דוגמה מקדימה Awk

דוגמאות מעשיות

רשימת הפקודות הנפוצה ביותר

צפה ברשימה המבוססת על ההיסטוריה של מסוף המערכת שהוזמן מהמשתמש ביותר בתדירות נמוכה ביותר.

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

לדוגמה:

דוגמה 1: פקודת Awk

גרף (טבלה) עם מספר חיבורים לכל מארח

צור גרף מבוסס טקסט 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 "" }'

לדוגמה:

דוגמה 2: פקודת Awk

רשימת ספריות לפי גודל

הדפיסו על המסך את רשימת הספריות של הנתיב הנוכחי מהגדול לקטן ביותר המציג את התוויות המתאימות לגודלן בעזרת האותיות: 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}'

לדוגמה:

דוגמה 3: פקודת Awk

הראה תנועה מממשק רשת

צפה בצריכת נתונים נכנסת ויוצאת באופן מקוון בקילו-בתים (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}'

לדוגמה:

דוגמה 5: פקודת Awk

רישום גרפי של מבנה הקובץ לפי גודל

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

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"}'

לדוגמה:

דוגמה 6: פקודת Awk

רשום סיכום של סוגי קבצים בספריה

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

find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g

לדוגמה:

דוגמה 8: פקודת Awk

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

בפוסט הבא על Shell Scripting נחקור פקודות אחרות.

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